我是靠谱客的博主 丰富石头,这篇文章主要介绍阿里云redis的lua脚本报错踩坑记,现在分享给大家,希望可以做个参考。

脚本里命令的调用必须用KEYS ARRAY的形式

错误表现

复制代码
1
2
ERR bad lua script for redis cluster, all the keys that the script uses should be passed using the KEYS array, and KEYS should not be in expression

解决办法

所有的redis.call这样的命令都要写成这种形式: redis.call('get', KEYS[1]), 第二个参数必须是KEYS[index]的这种,这好像是阿里云处于安全原因

相关链接

  • 阿里云Redis lua命令支持及相关限制说明

如果是Redis集群必须保证脚本的KEYS参数都落在同一个slot里

错误表现

复制代码
1
2
3
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 ERR eval/evalsha command keys must be in same slot(阿里云Redis集群版)

原因

集群版的redis,脚本操作的所有KEYS都必须保证在同一个slot里
这里的KEYS是指你用EVAL script numkeys key [key ...] arg [arg ...],
或者 EVALSHA sha1 numkeys key [key …] arg [arg …]传递给脚本的key参数,
不是脚本里执行redis.call(command,key) 里的key,最开始报错的时候,我就找错地方了

解决办法

保证传递给脚本的KEY都带有相同的{hash字符串}标记,比如:

复制代码
1
2
EVALSHA f_4a610f5543b3c3450220da7bd47825d3b6bffae8 abc_{大括号里保证相同} def_{大括号里保证相同} arg1 arg2

这样就能保证abc_{大括号里保证相同}def_{大括号里保证相同}这2个键落在同一个slot里了

最后

以上就是丰富石头最近收集整理的关于阿里云redis的lua脚本报错踩坑记的全部内容,更多相关阿里云redis内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(63)

评论列表共有 0 条评论

立即
投稿
返回
顶部