记录搭建redis集群以及使用过程中踩过的坑
集群搭建过程我参考的链接: https://w.cnblogs.com/nijunyang/p/12508098.html
1、几个报无权限操作的解决办法
chmod 777 /usr/local/redis-cluster chmod 777 /usr/local/redis-server chmod 777 /usr/local/redis-5.0.2/src/redis-cli
2、加入节点超时,一直 Waiting for the cluster to join
redis集群不仅需要开通redis客户端连接的端口,而且需要开通集群总线端口,集群总线端口为redis客户端连接的端口 + 10000,如redis端口为6379,则集群总线端口为16379
iptables 添加开放端口,
vi /etc/sysconfig/iptables
重启配置
systemctl restart iptables.service
3、启动集群失败,报错:Node 192.168.116.133:6379 is not empty............
解决办法参考:https://blog.csdn.net/qq_38151401/article/details/86741950
清理文件后需要重启所有节点实例
重点,重点,重点,使用过程中遇到的问题
4、java代码连接集群,批量操作,mset,mget
redis分片集群不支持跨分区操作,意思是说3个master集群,key1存在m1上,key2存在m2上,key3存在m3上,
redis命令行执行 mget key1,key2,key3 执行失败,会报keys have defferent slots,不能跨分片查询
spring项目引用redis.clients.jedis,也会报错,查看源码
springboot项目org.springframework.data.redis包,居然可以查到数据,没有异常,查看源码,他会先计算一下keys是不是在同一个分片,同一个分片就直接mget,
不在同一个分片他会创建一个map,key存节点信息,value存分布在这个节点上的key,然后使用并行io去执行,效率取决于最慢的一次请求