阿里云使用redisson出现Lua脚本错误的解决
错误提示:
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中script_check_enable参数为0即可解决该问题
谷歌搜索到相关Redisson的Issues,查到解决方法。
问题溯源:
Lua 脚本功能是 Reids的最大亮点, 通过内嵌对 Lua 环境的支持, Redis 解决了长久以来不能高效地处理 CAS (check-and-set)命令的缺点, 并且可以通过组合使用多个命令, 轻松实现以前很难实现或者不能高效实现的模式。
默认阿里云Redis会对lua脚本做一定限制,目的是为了保证脚本里面的所有操作都在相同slot进行,如果用户能够在代码确保所有操作都在相同slot而又想打破Redis集群的lua限制的话可以通过控制台修改script_check_enable参数为0,则后端不会对脚本进行校验。
云Redis集群对lua脚本限制如下:
所有key都应该由 KEYS 数组来传递,redis.call/pcall 中调用的redis命令,key的位置必须是KEYS array(不能使用Lua变量替换KEYS),否则直接返回错误信息,
“-ERR bad lua script for redis cluster, all the keys