redis lua脚本出现之前redis是没有服务器端运算能力的,主要是用来存储,用做缓存用,运算是在客户端进行,这样带来了很大的带宽流量。lua出现之后这一问题得到了充分的解决,非常棒!
redis lua脚本api介绍
eval 在redis服务器端执行lur脚本
evalsha 在redis 以脚本的sha1签名值在服务器端执行lua 脚本
script exists 判断脚本是否存在
script flush 释放lur脚本的缓存
script load 以sha1签名值做为key保存脚本
script kill 杀死当前执行的肢本
参考地址http://www.redis.io/commands#scripting
eval 的参数为 EVAL script numkeys key [key ...] arg [arg ...]
[b]redis 推荐使用参数格式调用lur脚本 为什么呢?[/b]
evalsha以key取代实际的脚本执行的,之所以用key是为了减少带宽流量,sha1一般要比实际的脚本短得多,如果脚本带着实参会在服务器端生成N份脚本,因为参数不同而脚本也会不同。所以才推荐使用参数化格式,
script load 参数为script 也就是说我们获取sha1的方法是在redis 服务器的,[b]那么我们每次调用evalsha的时侯不都是要调用一次该方法?[/b]那么就得不偿失了
为了方便管理和维护,我一般将脚本以如下格式保存成lua文件
文件名自定义即可
第一行:sha1:(脚本的sha1签名)如果没有执行过则第一行为空
第二行:脚本内容
当我们执行脚本时先打开该lua文件解释出第一行sha1值,如果存在则直接调用evalsha 方法,如果不存在则调用load方法并将sha1值保存至lua文件。再调用evalsha方法即可。
redis lua脚本api介绍
eval 在redis服务器端执行lur脚本
evalsha 在redis 以脚本的sha1签名值在服务器端执行lua 脚本
script exists 判断脚本是否存在
script flush 释放lur脚本的缓存
script load 以sha1签名值做为key保存脚本
script kill 杀死当前执行的肢本
参考地址http://www.redis.io/commands#scripting
eval 的参数为 EVAL script numkeys key [key ...] arg [arg ...]
[b]redis 推荐使用参数格式调用lur脚本 为什么呢?[/b]
evalsha以key取代实际的脚本执行的,之所以用key是为了减少带宽流量,sha1一般要比实际的脚本短得多,如果脚本带着实参会在服务器端生成N份脚本,因为参数不同而脚本也会不同。所以才推荐使用参数化格式,
script load 参数为script 也就是说我们获取sha1的方法是在redis 服务器的,[b]那么我们每次调用evalsha的时侯不都是要调用一次该方法?[/b]那么就得不偿失了
为了方便管理和维护,我一般将脚本以如下格式保存成lua文件
文件名自定义即可
第一行:sha1:(脚本的sha1签名)如果没有执行过则第一行为空
第二行:脚本内容
当我们执行脚本时先打开该lua文件解释出第一行sha1值,如果存在则直接调用evalsha 方法,如果不存在则调用load方法并将sha1值保存至lua文件。再调用evalsha方法即可。