Docker环境下秒建Redis集群,连SpringBoot也整上了!

摘要

为了提高Redis的存储容量和响应速度,有时候我们需要搭建Redis集群。本文主要讲述Redis集群环境的搭建步骤以及如何在SpringBoot中整合使用Redis集群。

Redis集群搭建

这里我们使用最方便的搭建方式,使用Docker Compose来搭建,对Docker Compose不了解的朋友可以参考下《使用Docker Compose部署SpringBoot应用》。我们将搭建一个6节点的Redis集群,包括3个主节点和3个从节点。

  • 在搭建Redis集群之前,我们需要修改下Redis的配置文件redis.conf,该文件的下载地址:github.com/antirez/red…
  • 需要修改的属性如下,主要是修改了一些集群配置和运行端口,端口号需要按需修改为6391~6396:
<code># 开启集群功能
cluster-enabled yes
# 设置运行端口
port 6391
# 设置节点超时时间,单位毫秒
cluster-node-timeout 15000
# 集群内部配置文件
cluster-config-file "nodes-6391.conf"
复制代码/<code>
  • 从docker-compose.yml文件中我们可以看到,我们的Redis容器分别运行在6391~6396这6个端口之上, 将容器中的/config配置目录映射到了宿主机的/mydata/redis-cluster/config目录,同时还以redis.sh脚本作为该容器的启动脚本;
  • redis.sh脚本的作用是根据environment环境变量中的PORT属性,以指定配置文件来启动Redis容器;
<code>redis-server  /config/nodes-${PORT}.conf
/<code>
  • 接下来我们需要把Redis的配置文件和redis.sh上传到Linux服务器的/mydata/redis-cluster/config目录下;


Docker环境下秒建Redis集群,连SpringBoot也整上了!


  • 接下来上传我们的docker-compose.yml文件到Linux服务器,并使用docker-compose命令来启动所有容器;
<code>docker-compose up -d/<code>
  • 启动过程中会输出如下信息;


Docker环境下秒建Redis集群,连SpringBoot也整上了!


  • 此时进入其中一个Redis容器之中,初始化Redis集群;
<code># 进入Redis容器
docker exec -it redis-master1 /bin/bash
# 初始化Redis集群命令
redis-cli --cluster create \\
192.168.6.139:6391 192.168.6.139:6392 192.168.6.139:6393 \\
192.168.6.139:6394 192.168.6.139:6395 192.168.6.139:6396 \\
--cluster-replicas 1/<code>
  • 集群创建过程中会让你确认配置,输入yes确认即可;


Docker环境下秒建Redis集群,连SpringBoot也整上了!


  • Redis集群创建成功后会输出如下信息;
Docker环境下秒建Redis集群,连SpringBoot也整上了!


  • 创建成功后我们可以使用redis-cli命令连接到其中一个Redis服务;
<code># 单机模式启动
redis-cli -h 127.0.0.1 -p 6391
# 集群模式启动
redis-cli -c -h 127.0.0.1 -p 6391/<code>
  • 之后通过cluster nodes命令可以查看节点信息,发现符合原来3主3从的预期。


Docker环境下秒建Redis集群,连SpringBoot也整上了!


SpringBoot中使用Redis集群

我们在《Spring Data Redis 最佳实践!》中讲到了在SpringBoot中如何使用Redis,用的是单节点的Redis服务,这次我们讲下如何使用Redis集群服务。

  • 我们在原来代码的基础上进行改造,修改application.yml配置文件,添加Redis集群配置;
<code>spring:
redis:
# host: 192.168.6.139 # Redis服务器地址
# database: 0 # Redis数据库索引(默认为0)
# port: 6379 # Redis服务器连接端口
password: # Redis服务器连接密码(默认为空)
timeout: 3000ms # 连接超时时间
lettuce:
pool:
max-active: 8 # 连接池最大连接数
max-idle: 8 # 连接池最大空闲连接数
min-idle: 0 # 连接池最小空闲连接数
max-wait: -1ms # 连接池最大阻塞等待时间,负值表示没有限制
cluster:
nodes:
- 192.168.6.139:6391
- 192.168.6.139:6392
- 192.168.6.139:6393
- 192.168.6.139:6394
- 192.168.6.139:6395
- 192.168.6.139:6396/<code>
  • 此时我们再次调用获取品牌详情的接口,就会把品牌信息缓存到Redis集群中去了;
  • 由于Redis容器redis-master1和redis-slave2互为主从,所以里面都缓存了相同的品牌详情信息。


Docker环境下秒建Redis集群,连SpringBoot也整上了!


作者:MacroZheng
链接:https://juejin.im/post/5e81fd1ff265da47e84e5e2c


分享到:


相關文章: