EVAL、EVALSHA命令
Redis
从2.6.0版本开始提供了eval
命令,通过内置的Lua
解释器,可以让用户执行一段Lua
脚本并返回数据。因为Redis
单线程模型的特点,可以保证多个命令的原子性
(因为最近的项目需要用到简单的分布式锁,所以会用到lua来释放锁)
脚本性能
Redis
保证了脚本执行的原子性,所以在当前脚本没执行完之前,别的命令和脚本都是等待状态,所以一定要控制好脚本中的内容,防止出现需要消耗大量时间的内容(逻辑相对简单)。
带宽优化
- 为了避免每次执行都重复的将
Lua
脚本内容发送,Redis
提供了evalsha
命令,只需要将Lua脚本内容的SHA1校验和发送即可(evalsha 6b1bf486c81ceb7edf3c093f4c48582e38c0e791 0
)。 - Lua脚本中的
变量
(动态数据)请使用KEYS
和ARGV
获取,如果把变量
放在脚本中,必然会导致每次的脚本内容都不同(SHA1),Redis缓存大量无用或者一次性的脚本内容。
Redis Cluster 或 阿里云Redis集群版使用注意事项
Redis从3.0开始支持了Cluster功能,之前