今天被redis的ERR no such key狠狠的教育了

先描述一下车祸现场:

org.springframework.dao.InvalidDataAccessApiUsageException: ERR no such key. channel: command: (RENAME), params: [[123, 99, 111, 110, 118, 58, 108, 105, 115, 116, …], [123, 99, 111, 110, 118, 58, 108, 105, 115, 116, …]]; nested exception is org.redisson.client.RedisException: ERR no such key. channel: command: (RENAME), params: [[123, 99, 111, 110, 118, 58, 108, 105, 115, 116, …], [123, 99, 111, 110, 118, 58, 108, 105, 115, 116, …]]

因为我们测试环境是rerdis的集群,一开始考虑到的问题是rename后新的key落到了另一个节点上,所以会出错,后来发现是因为rename的源key不存在,所以抛出的异常,对于redis集群模式,如果想让两个节点命中同一个节点上,可以指定一个相同的前缀,用 {} 进行包装,即可实现落到同一个节点上,可以使用如下的命令获取到对应的key落到那个槽位上(前提redis必须是集群模式)

redis:6379> CLUSTER KEYSLOT “{convo_list}_abc_abc”
(integer) 13975
redis:6379> CLUSTER KEYSLOT “{convo_list}_abc_ab234234c”
(integer) 13975

总结:
1.集群模式下,使用rename报错,可能是落到了另一个节点上,可能源key不存在
2.集群模式下,如果想让两个或者多个key落到同一个节点上,可以用 {} 修饰统一前缀
3.集群模式下,即使你的key不是用 : 分段的,只要带上 {} 依旧会落到同一台机器上
4.集群模式下,可以使用 CLUSTER KEYSLOT key 计算对应的key落到哪个槽位上

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值