Lua 脚本功能是 Reids的最大亮点, 通过内嵌对 Lua 环境的支持, Redis 解决了长久以来不能高效地处理 CAS (check-and-set)命令的缺点, 并且可以通过组合使用多个命令, 轻松实现以前很难实现或者不能高效实现的模式。
阿里云Redis主从版本、集群版本、读写分离版本都支持Lua相关命令。用户如果发现无法执行Eval相关命令,比如报"ERR command eval not support for normal user"的时候可以再控制台进行一个小版本升级完成,升级过程中有闪断和只读影响,请在业务低峰期进行操作。
集群版本限制
默认阿里云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 that the script uses should be passed using the KEYS arrayrn"。
- 所有key必须在1个slot上,否则返回错误信息,"-ERR eval/evalsha command keys must be in same slotrn"。
- 调用必须要带有key,否则直接返回错误信息, "-ERR for redis cluster, eval/evalsha number of keys can't be negative or zerorn"。
请发表评论