Login
网站首页 > 文章中心 > 其它

Redis EVALSHA命令_Redis的命令

作者:小编 更新时间:2023-09-30 17:36:20 浏览量:129人看过

Redis的EVALSHA命令是一个用来执行Lua脚本的命令.相比于EVAL命令,EVALSHA命令的执行速度更快,且可以避免在脚本较长时因为传输脚本内容而导致的网络延迟.

使用方法

EVALSHA命令的语法如下:


EVALSHA script_sha1 numkeys key [key ...] arg [arg ...]


其中,script_sha1是指已经在Redis缓存中保存的Lua脚本的sha1值,numkeys代表脚本中使用到的key的个数,key是被Lua脚本使用到的键名,arg是传入到Lua脚本中使用的值.

实例说明

实例1:


local name = KEYS[1] 
local age = ARGV[1] 
redis.call('SET', name, age) 
return redis.call('GET', name)


此时此刻呢快速运行一下上述脚本,将值写入缓存中:


> EVAL "local name = 'Tom' local age = 20 redis.call('SET', name, age) return redis.call('GET', name)" 0


此时此刻呢我们可以使用EVALSHA命令来实现同样的逻辑:


> EVALSHA "926f32424d69b205b297296e4f7f3361d011d185" 1 Tom 20


经过测试,两个命令都可以正确地将值写入缓存中.

继续考虑另一个Lua脚本,脚本内容如下:


if tonumber(redis.call('GET', KEYS[1])) > tonumber(ARGV[1])
then
redis.call('SET', KEYS[1], ARGV[1]) 
return 1
else
return 0 
end


基于以上脚本内容,我们可以使用EVALSHA命令来实现原来的脚本内容,而不用再次传输完整的脚本内容:


> EVALSHA "3618e63f85c0421efb015067f99b1d528ec7be50" 1 test 10
(integer) 1
> EVALSHA "3618e63f85c0421efb015067f99b1d528ec7be50" 1 test 11
(integer) 0


以上命令分别比较test的值,如果值为10,则将其更新为11,并返回1;否则返回0.这在Redis缓存中的使用场景比较多见.

版权声明:倡导尊重与保护知识产权。未经许可,任何人不得复制、转载、或以其他方式使用本站《原创》内容,违者将追究其法律责任。本站文章内容,部分图片来源于网络,如有侵权,请联系我们修改或者删除处理。

编辑推荐

热门文章