您是否需要在Redis脚本中提前声明密钥?
我的计划是将一些现有的Redis密钥存储在散列中,稍后再从Redis
Lua脚本中获取并采取行动。我读到,最好的做法是提供调用时脚本中使用的所有键EVAL
。
我的问题是,运行在运行时没有提供任何键EVAL
,而是对从脚本 内部 获取的某些键进行操作的脚本是否安全?如果没有,后果是什么,如何避免这一缺点?
我提到在的时候EVAL
,无法知道特定哈希中的键是什么。我可以在步骤之前的某个步骤中从哈希中获取所有键EVAL
,然后将其提供给EVAL
,但这听起来像是过分杀了。
回答:
由于文档中的含糊不清,这个问题被问了很多,但是我将借此机会尝试指定用于管理Redis脚本中键的使用的实际规则。
实际规则是这样的:
如果您不使用Redis Cluster,则将始终满足这些条件,因为只有一台服务器。
如果使用Redis Cluster,则必须至少指定一个密钥,并且脚本使用的所有密钥必须与指定的密钥位于同一服务器上。
因此,请回答您的问题:如果您不使用集群,您的脚本将可以正常工作。结果是,如果您以后切换到集群,它将无法正常工作,因为Redis不知道将脚本发送到哪里。
Redis也可能会更改为执行已记录的规则,从而使所有动态生成密钥的脚本无效。我认为这将是一个严重的错误,而且我认为这不会发生。但是,如果没有其他规定,则指定密钥对于文档很有用,因此,如果我碰巧事先知道密钥,我总是这样做。
以上是 您是否需要在Redis脚本中提前声明密钥? 的全部内容, 来源链接: utcz.com/qa/402379.html