开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 14 天,点击查看活动详情
每日英语:
The jealous are troublesome to others, but a torment to themselves.
善妒的人对别人是个麻烦,而对自己则是个折磨。 -威廉·佩恩
Java连接Redis集群
在java客户端连接Redis集群,只需要修改配置文件bootstrap.yml中redis链接即可:
redis:
cluster:
nodes: 192.168.100.130:7001,192.168.100.130:7002,192.168.100.130:7003,192.168.100.130:7004,192.168.100.130:7005,192.168.100.130:7006
我们可以把mall-permission-service和mall-api-gateway中redis链接地址换成集群服务地址,测试后我们可以发现权限数据正常入库:
扩容与迁移
在生产环境,如果缓存数据量过大,就有扩容需求,针对Redis进行扩容,其实只用使用它的指令即可,但无论怎么使用,都和Redis集群的原理有关,也就是key经过CRC16算法取模最终的值在0至16383范围之间。
新节点创建
我们需要做扩容操作,所以需要先创建一个节点,创建单个节点我们可以把之前的脚本修改一下,创建单个节点的文件oneinstall.sh:
#!/bin/bash
#在/usr/local/xz/redis-cluster下生成conf和data目标,并生成配置信息
#换行
echo -e "\n"
#输入信息
read -p "请输入容器端口:" DOCKER_PORT
#输入端口赋值
port=$DOCKER_PORT;
echo -e "$port"
#创建配置文件
mkdir -p ./${port}/conf && PORT=${port} envsubst < ./redis-config.tmpl > ./${port}/conf/redis.conf && mkdir -p ./${port}/data;
#创建redis容器
docker run -d -it -p ${port}:${port} -p 1${port}:1${port} -v /usr/local/xz/redis-cluster/${port}/conf/redis.conf:/usr/local/etc/redis/redis.conf -v /usr/local/xz/redis-cluster/${port}/data:/data --privileged=true --restart always --name redis-${port} --net redis-net --sysctl net.core.somaxconn=1024 redis redis-server /usr/local/etc/redis/redis.conf;
#查找ip
echo -n "启动$(docker inspect --format '{{ (index .NetworkSettings.Networks "redis-net").IPAddress }}' "redis-${port}")":${port}" 成功!";
echo -e "\n"
给oneinstall.sh添加可执行权限,并执行该脚本:
#添加可执行权限
chmod +x oneinstall.sh
#创建新的节点
./oneinstall.sh
#输入7007端口
7007
此时7007节点创建完成:
扩容
我们要进行扩容,可以先查看当前集群状态:
#查看集群状态
cluster nodes
状态信息如下:
我们现在开始执行节点增加,也就是扩容操作:
./redis-cli --cluster add-node 192.168.100.130:7007 192.168.100.130:7001
执行后,效果如下:
此时我们再查看状态:cluster nodes
此时节点已经增加进来,但目前没有分配任何哈希槽,所以无论做数据增加还是删除以及查询,都和它没有一毛钱关系,因此我们还要把部分哈希槽迁移到该节点上,同时被迁移的节点上对应数据也会跟着一起迁移过来,迁移命令如下:
./redis-cli --cluster reshard 192.168.100.130:7003 --cluster-from 5d93f5ca5e7289c04b00ccc468e0ce4ef8afaea9 --cluster-to 889a13a1e1761f1e83c25e41287d1c463175d467 --cluster-slots 100
参数说明:
5d93f5ca5e7289c04b00ccc468e0ce4ef8afaea9 指的是7003节点
889a13a1e1761f1e83c25e41287d1c463175d467 指定是7007节点
表示将7003节点中100个哈希槽迁移到7007上来
我们再查看状态:
思考:如何实现收容?
收容其实也很简单,也是使用命令即可,要做2个操作
1:哈希槽迁移
2:删除节点
总结
本篇主要介绍一下Redis搭建为集群后,java后台如何连接到Redis集群。简单介绍一下Redis扩容与迁移。