如果我可以在Redis集群中使用事务和LUA脚本(而不是缓存脚本)获得相同的结果,哪一个具有更好的性能? LUA脚本必须在每次执行时编译,对吧?那么它对性能有影响吗?
我找不到任何方法在Redis群集的服务器上缓存脚本,只接收该脚本的一个sha1
并基于交易文件:
"我们可能会弃用并最终删除交易"
是否有任何理由为什么交易将被LUA脚本替换
对不起,如果我弄错了什么!
答案 0 :(得分:1)
使用SCRIPT LOAD
获取任何脚本的sha1(或者在Redis之外计算它,例如,在脚本的shell中使用sha1sum
计算,但记得处理换行符。)
WRT表现虽然我没有正式数据来支持这种说法,但我的经验表明差异可以忽略不计,如果有的话。
是否有任何理由为什么交易将被LUA脚本替换
Lua就像在类固醇上进行交易一样,MULTI
提供Lua尚未提供的任何内容(除了乐观的锁模式)。也就是说,我发现很难相信它会被彻底淘汰。
答案 1 :(得分:1)
StackExchange.Redis在幕后工作,自动自动使用准备好的脚本(SCRIPT LOAD
,EVALSHA
等),因此在每个调用的基础上,脚本开销很少。此外,事务可能涉及延迟步骤,以在决定是否完成或中止脚本之前确认断言。由于neee首先获取所需数据,发出断言等,因此使用redis事务通常也很令人尴尬。这也会带来带宽和延迟影响。出于所有这些原因:通常,脚本通常更方便。但是,有时候它们可能不适用。此外,您的服务器上可能未启用脚本(无论是版本控制还是安全问题)。请注意,如果您的脚本逻辑错误,可能会发生非常糟糕的事情(阻止服务器而无法恢复)。