相关疑难解决方法(0)

我应该在Redis群集中使用Lua时指定完整的密钥名称,还是只能传递主题标签?

我有Lua脚本,我正在考虑迁移到Redis Cluster

我应该在通话时指定完整的密钥名称eval吗?或者我可以通过指定主题标签逃脱?

例如,我想只传递{UNIQUE_HASH_TAG}代替{UNIQUE_HASH_TAG}/key1,{UNIQUE_HASH_TAG}/key2...等

我有很多键,逻辑非常复杂 - 有时我最终动态生成键名但在同一个哈希标记内.

我是否会通过传递哈希标签而不是密钥名称来违反某些规范?

lua redis

7
推荐指数
1
解决办法
468
查看次数

Redis集群:使用Lua脚本更新不同节点中的密钥

我有一个由多个节点组成的redis集群.我想在单个原子操作中更新3个不同的键.我的Lua脚本如下:

local u1 = redis.call('incrby', KEYS[1], ARGV[1])
local u2 = redis.call('incrby', KEYS[2], ARGV[1])
local u3 = redis.call('incrby', KEYS[3], ARGV[1])
Run Code Online (Sandbox Code Playgroud)

我解雇了它:

EVAL script 3 key1 key2 key3 arg
Run Code Online (Sandbox Code Playgroud)

但是我得到了WARN Resp(AppErr CROSSSLOT Keys in request don't hash to the same slot).上述操作无法完成,更新将失败.我似乎无法使用单个Lua脚本修改不同节点中的键.但根据文件:

必须在执行前分析所有Redis命令,以确定命令将在哪些键上运行.为了使EVAL成为现实,必须明确传递密钥.这在许多方面都很有用,但尤其要确保Redis Cluster可以将您的请求转发到适当的群集节点.

请注意,此规则未强制执行,以便为用户提供滥用Redis单实例配置的机会,但代价是编写与Redis Cluster不兼容的脚本.

所以我认为只要遵循密钥传递规则,脚本就应该与redis集群兼容.我想知道这里的问题是什么,我应该怎么做才能更新单个脚本中的所有键.

redis

4
推荐指数
1
解决办法
3797
查看次数

标签 统计

redis ×2

lua ×1