Docker搭建redis集群,SpringBoot整合Redis ,无坑版

安装docker就不说了,直接开始正题。

一.Docker搭建redis集群

1.linux开放需要的端口(此次安装用如下接口),如无法执行,请打开linux的防火墙

1.1打开防火墙命令:

systemctl start firewalld

1.2开放需要的端口

firewall-cmd --permanent --zone=public --add-port=7000-7005/tcp
firewall-cmd --permanent --zone=public --add-port=17000-17005/tcp
#重新加载配置
firewall-cmd --reload
#查看开放的端口
firewall-cmd --permanent --zone=public --list-ports

2.下载redis镜像

docker pull redis

3.创建linux中redis容器集群文件夹(进入目录:cd /data/redis-cluster)

mkdir -p /data/redis-cluster   

4.创建redis的配置模板文件:redis-cluster.tmpl(用于生成redis.conf)

vim redis-cluster.tmpl

4.1.如下是redis-cluster.tmpl内容

##节点端口
port ${PORT}
##开启集群模式
protected-mode no
##cluster集群模式
cluster-enabled yes 
##集群配置名                               
cluster-config-file nodes.conf
##超时时间 
cluster-node-timeout 5000
##集群的中各个容器的ip地址
cluster-announce-ip 192.168.10.13
##节点映射端口
cluster-announce-port ${PORT}
##节点总线端口
cluster-announce-bus-port 1${PORT}
##持久化模式
appendonly yes

5.在/data/redis-cluster下生成redis的conf和data目录,并生成redis.conf配置文件

for port in `seq 7000 7005`; do \
  mkdir -p ./${port}/conf \
  && PORT=${port} envsubst < ./redis-cluster.tmpl > ./${port}/conf/redis.conf \
  && mkdir -p ./${port}/data; \
done

5.1创建后如下图:

6.创建6个redis容器并启动

for port in `seq 7000 7005`; do \
  sudo docker run -d --net host --privileged=true \
  -v $PWD/${port}/conf/redis.conf:/data/redis/redis-${port}.conf \
  -v $PWD/${port}/data:/data \
  --restart always --name redis-${port} \
  redis redis-server /data/redis/redis-${port}.conf; \
done

6.1查询看正在运行的6个redis容器:docker ps

7.随便进入一个redis容器

docker exec -it redis-7000 bash

8.创建cluster集群

redis-cli --cluster create 192.168.1.76:7000 192.168.1.76:7001 192.168.1.76:7002 192.168.1.76:7003 192.168.1.76:7004 192.168.1.76:7005 --cluster-replicas 1

9.这时如果如下图就说明成功

10.如果要重新创建集群,删掉docker镜像,删掉redis-cluster目录下的所有“文件夹”,然后重新从第5步开始即可。

10.1.批量删除镜像命令

for port in `seq 7000 7005`; do \
  docker stop redis-${port};
  docker rm redis-${port};
done

注意事项:如果是阿里云服务器需要本地机器访问的话,需要在安全策略中打开17001至17005的6个端口,同时创建集群时其中的ip地址必须是外网,否则无法本地访问。

二 . SpringBoot整合Redis

1.引入依赖

<!--redis依赖-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
    <version>2.1.8.RELEASE</version>
</dependency>
<!-- lettuce pool 缓存连接池-->
<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-pool2</artifactId>
    <version>2.9.0</version>
</dependency>

2.创建java文件,初始化Redis配置,解决乱码等问题

@Configuration
@AutoConfigureAfter(RedisAutoConfiguration.class)
public class RedisConfig {

        @Bean
        public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {
            RedisTemplate<String, Object> template = new RedisTemplate<>();
            template.setConnectionFactory(factory);

            // 使用Jackson2JsonRedisSerialize 替换默认的jdkSerializeable序列化
            Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
            ObjectMapper om = new ObjectMapper();
            om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
            om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
            jackson2JsonRedisSerializer.setObjectMapper(om);

            StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();

            // key采用String的序列化方式
            template.setKeySerializer(stringRedisSerializer);
            // hash的key也采用String的序列化方式
            template.setHashKeySerializer(stringRedisSerializer);
            // value序列化方式采用jackson
            template.setValueSerializer(jackson2JsonRedisSerializer);
            // hash的value序列化方式采用jackson
            template.setHashValueSerializer(jackson2JsonRedisSerializer);
            template.afterPropertiesSet();
            return template;

    }
}

3.更改配置文件

#redis集群配置
spring.redis.timeout=5000
spring.redis.cluster.max-redirects=3
spring.redis.cluster.lettuce.pool.max-idle=10
spring.redis.cluster.lettuce.pool.max-wait=5000
spring.redis.cluster.lettuce.pool.max-active=200
spring.redis.cluster.lettuce.pool.min-idle=3
spring.redis.cluster.nodes=192.196.51.38:7000,192.196.51.38:7001,192.196.51.38:7002,192.196.51.38:7003,192.196.51.38:7004,192.196.51.38:7005

4.用法,也可以自己写一个工具类

@Autowired
private RedisTemplate<String,Object> redisTemplate;


//插入值
redisTemplate.opsForValue().set(key, value);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值