Redis错误:Cannot determine a partition to read for slot

本文记录了一次在SpringBoot项目中遇到的Redis集群错误:无法确定读取槽位,原因在于单节点集群开启集群功能后未正确分配Slot。通过使用redis-cli命令检查集群状态,发现存在开放槽位,最终通过执行cluster fix命令并确认重新分配槽位解决了问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天spring boot使用redis的时候,发生了如下的错误:io.lettuce.core.cluster.PartitionSelectorException: Cannot determine a partition to read for slot xxx.
上网查找说可能是node被删除了,但是slot没有重新分配,但是我并没有做过删除操作,然后想了想,我的redis集群只有一个节点,最开始搭建redis的时候,没有开启集群功能(用于测试的redis,要求不高),后来为了和main的集群统一,redis开启了集群功能(还是一个节点,,,),然后重启了,怀疑可能是因为开启集群导致的。
调用redis-cli命令检查步骤如下:(其中10.111.111.111:6379是redis的node地址,假的,123456是密码)
首先链接集群尝试:

./redis-cli --cluster reshard 10.111.111.111:6379 -a 123456
#或者
./redis-cli --cluster check 10.111.111.111:6379 -a 123456

结果如下:

Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
>>> Performing Cluster Check (using node 10.113.197.5:6379)
M: 87d66a4ca81b7abfd81b78bbfd2521691f9fbe09 10.113.197.5:6379
   slots: (0 slots) master
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[ERR] Not all 16384 slots are covered by nodes.

和spring boot基本上一样的错误,证明确实是redis的问题。
然后为了解决上述问题,使用命令进行修复:

./redis-cli --cluster fix 10.111.111.111:6379 -a 123456

中途弹出如下确认:
Fix these slots by covering with a random node? (type 'yes' to accept):输入yes重新分配slots即可。
然后连接集群发现恢复正常。

引用\[1\]和\[2\]中提到的错误信息是关于连接Redis时出现的异常。根据这些错误信息,可能的原因和解决方法如下: 1. 如果是远程访问Redis: - 检查redis.conf文件中的配置,默认情况下只允许本机访问Redis,需要将bind 127.0.0.1这一项注释掉。 - 将protected-mode yes改为no,允许外部访问。 - 检查虚拟机防火墙是否关闭。 - 修改完配置后,需要重启Redis。 2. 如果是本机访问Redis: - 检查配置文件中Redis的IP地址和端口是否正确,一般默认是127.0.0.1:6379。 - 设置连接超时时间,可以在配置文件中添加spring.redis.timeout=10000。 - 检查配置文件中的连接密码是否正确,如果没有设置密码,可以不写。 - 检查本地Redis是否处于启动状态。 另外,引用\[3\]中提到的解决思路也可以参考: 1. 修改application.yml中的redis配置,将连接超时时间设置为合适的值。 2. 在Linux中找到redis的配置文件redis.conf,使用命令vim redis.conf进行编辑: - 注释掉bind 127.0.0.1,允许外部访问Redis。 - 将protected-mode yes改为protected-mode no,允许外部访问。 - 将daemonize yes改为daemonize no,让Redis在后台运行。 综上所述,根据错误信息"Redis exception; nested exception is io.lettuce.core.RedisException: Cannot determine a node to read",可以尝试根据以上方法进行排查和解决。 #### 引用[.reference_title] - *1* *3* [Unable to connect to Redis; nested exception is io.lettuce.core.RedisConnectionException: 我的解决办法](https://blog.youkuaiyun.com/ohh_lang/article/details/106067037)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [Unable to connect to Redis; nested exception is io.lettuce.core.RedisConnectionException:](https://blog.youkuaiyun.com/qq_45745319/article/details/123754785)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值