redis集群执行lua

偏执的太偏执、 2022-03-28 05:46 683阅读 0赞

1、问题

单机模式下,执行lua脚本没有问题。放到集群执行后,报错

  1. ERR Error running script (call to f_4a610f5543b3c3450220da7bd47825d3b6bffae8): @user_script:1: @user_script: 1: Lua script attempted to access a non local key in a cluster node

2、解决

因为Redis要求单个Lua脚本操作的key必须在同一个节点上,但是Cluster会将数据自动分布到不同的节点(虚拟的16384个slot,具体看官方文档)。

Redis cluster对多key操作有限制,要求命令中所有的key都属于一个slot,才可以被执行。

  1. > CLUSTER KEYSLOT somekey
  2. 11058
  3. > CLUSTER KEYSLOT foo{hash_tag}
  4. (integer) 2515
  5. > CLUSTER KEYSLOT bar{hash_tag}
  6. (integer) 2515

keySlot算法中,如果key包含{},就会使用第一个{}内部的字符串作为hash key,这样就可以保证拥有同样{}内部字符串的key就会拥有相同slot。

官方地址:https://redis.io/commands/cluster-keyslot

发表评论

表情:
评论列表 (有 0 条评论,683人围观)

还没有评论,来说两句吧...

相关阅读

    相关 SpringBoot + Redis 执行lua脚本

    1、背景 有时候,我们需要一次性操作多个 Redis 命令,但是 这样的多个操作不具备原子性,而且 Redis 的事务也不够强大,不支持事务的回滚,还无法实现命令之间的逻

    相关 redis执行Lua脚本

    Lua 是一个小巧的脚本语言。该语言的设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。 Lua脚本可以很容易的被C/C++代码调用,也可以反过来调