您当前的位置: 首页 > 慢生活 > 程序人生 网站首页程序人生
Redis Evalsha 命令
发布时间:2021-11-11 22:19:10编辑:雪饮阅读()
Redis Evalsha 命令根据给定的 sha1 校验码,执行缓存在服务器中的脚本。
将脚本缓存到服务器的操作可以通过 SCRIPT LOAD 命令进行。
这个命令的其他地方,比如参数的传入方式,都和 EVAL 命令一样。
redis Evalsha 命令基本语法如下:
redis 127.0.0.1:6379> EVALSHA sha1 numkeys key [key ...] arg [arg ...]
参数说明:
sha1 : 通过 SCRIPT LOAD 生成的 sha1 校验码。
numkeys: 用于指定键名参数的个数。
key [key ...]: 从 evalsha(菜鸟教程误写为eval了) 的第三个参数开始算起,表示在脚本中所用到的那些 Redis 键(key),这些键名参数可以在 Lua 中通过全局变量 KEYS 数组,用 1 为基址的形式访问( KEYS[1] , KEYS[2] ,以此类推)。
arg [arg ...]: 附加参数,在 Lua 中通过全局变量 ARGV 数组访问,访问的形式和 KEYS 变量类似( ARGV[1] 、 ARGV[2] ,诸如此类)。
实例:
127.0.0.1:6379> script load "return 'hello moto'"
"232fd51614574cf0867b83d384a5e898cfd24e5a"
127.0.0.1:6379> evalsha "232fd51614574cf0867b83d384a5e898cfd24e5a" 0
"hello moto"
个人理解:
script load这里return就是return一个字符串的sha1算法结果。
然后evalsha可以将sha1运算结果反解开,evalsha的numkeys可以为0 ,为0时候则后面的key数组和arg数组都可以不用传递。
多个key的sha1操作实例:
127.0.0.1:6379> script load "return {KEYS[1],KEYS[2],ARGV[1],ARGV[2]}"
"a42059b356c875f0717db19a51f6aaca9ae659ea"
127.0.0.1:6379> evalsha "a42059b356c875f0717db19a51f6aaca9ae659ea" 2 key1 key2 val1 val2
1) "key1"
2) "key2"
3) "val1"
4) "val2"
一些误解:
网上有很多例子是直接下面这样的多个key的evalsha操作,实际测试在windows上面会报错“(error) NOSCRIPT No matching script. Please use EVAL.”
linux上面应该可以,没有测试过。但个人理解能不能执行应该是区别于能不能自动判断是脚本本身还是sha1的结果。
redis 127.0.0.1:6379> EVALSHA "return {KEYS[1],KEYS[2],ARGV[1],ARGV[2]}" 2 key1
key2 first second
1) "key1"
2) "key2"
3) "first"
4) "second"
关键字词:Redis,Evalsha,命令
上一篇:Redis Echo 命令