lua在redis集群中的解决方案-- command keys must in same slot

在从单机版Redis迁移到集群版时,遇到lua脚本报错'command keys must in same slot'。文章介绍了问题原因,即Redis集群会根据KEY的哈希分布到不同slot,破坏了lua事务的执行。为解决此问题,提出了利用Redis的{}写法,通过对KEY部分字符串哈希确保脚本在同一slot执行,以保持事务一致性。
摘要由CSDN通过智能技术生成

上一篇文章基于lua-redis实现榜单类服务的数据一致性提到lua脚本的使用。
但是测试环境的redis是单机版的,而线上服务器确是集群版。导致同样的代码在线上服务器一直报错,经过测试发现集群版lua脚本的使用并不同于单机版。

command keys must in same slot

为了保持事务,同一个lua脚本访问应该访问同一个slot,但是redis集群会根据KEY进行hash并取模,因此如果采用默认hash的话,那么就会产生下面的错误。

在这里插入图片描述
在这里插入图片描述

解决方案,redis支持{}写法,可以实现对KEY的部分字符串进行hash,这样就能保证同一个lua脚本被同一个slot执行,从而保持事务的一致性。
在这里插入图片描述

 
 EVAL ' local res = {
  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值