redis eval

发布时间:2022-07-05 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了redis eval脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

参考文档:http://redisdoc.COM/script/script_kill.htML

一、EVAL命令1、从 Redis 2.6.0 版本开始,通过内置的 Lua 解释器,可以使用 EVAL 命令对 Lua 脚本进行求值。示例:

127.0.0.1:6379> eval "return {KEYS[1],KEYS[2],argV[1],ARGV[2]}" 2 key1 key2 First second
1) "key1"
2) "key2"
3) "first"
4) "second"

 

eval:执行lua脚本的命令"return {KEYS[1],KEYS[2],ARGV[1],ARGV[2]}":lua脚本内容,KEYS[x]是键盘参数,ARGV[x]是附加参数2:指定KEYS键的数量key1 key2:参数值first second:附加参数值

注意:指定KEY键数量之后的都是附加参数值,ARGV[1]指第一个附加参数值,ARGV[2]指第二个附加参数值。

例:

127.0.0.1:6379> eval "return {KEYS[1],KEYS[2],ARGV[1],ARGV[2]}" 3 key1 key2 first second
1) "key1"
2) "key2"
3) "second"

 

指定KEYS占位符3个,则key1 key2 first分别对应着KEYS[1] KEYS[2] KEYS[3]secondary 是第一个附加参数值所以只能打印出key1 key2 second

redis eval

2、在 Lua 脚本中,可以使用两个不同函数来执行 Redis 命令,它们分别是:redis.call()redis.pcall()示例:

127.0.0.1:6379> eval "return redis.call('set','foo','bar')" 0
OK
127.0.0.1:6379> eval "return redis.call('set',KEYS[1],'bar')" 1 foo
OK

 

唯一的区别是当 redis.call() 在执行命令的过程中发生错误时,脚本会停止执行,并返回一个脚本错误,错误的输出信息会说明错误造成的原因。redis.pcall() 出错时并不引发(raise)错误,而是返回一个带 err 域的 Lua 表(table),用于表示错误。

3、在redis-cli命令中行直接执行lua脚本

root@ip-172-31-30-45:~# cat test.lua
local name=KEYS[1]
return "hello "..name.."!"
root@ip-172-31-30-45:~# redis-cli --eval test.lua nihao
"hello nihao!"

 

4、更多示例:

127.0.0.1:6379> eval 'local name=KEYS[1] return "hello "..name.."!"' 1 nihao
"hello nihao!"

 

二、EVALSHA命令:根据给定的 sha1 校验码,对缓存在服务器中的脚本进行求值,将脚本缓存到服务器的操作可以通过 SCRIPT LOAD script 命令进行。sha1 校验码在使用【SCRIPT LOAD script】命令加载脚本时会得到。示例:

127.0.0.1:6379> SCRIPT LOAD "return 'hello moto'"
"232fd51614574CF0867b83d384a5e898cfd24e5a"
127.0.0.1:6379> EVALSHA "232fd51614574cf0867b83d384a5e898cfd24e5a" 0
"hello moto"

 

三、SCRIPT LOAD1、直接在redis命令行中加载脚本示例:

127.0.0.1:6379> script load "return {KEYS[1]}"
"8e5266f6a4373624739bd44187744618bc810de3"
127.0.0.1:6379> evalsha 8e5266f6a4373624739bd44187744618bc810de3 1 abc
1) "abc"

 

四、SCRIPT EXISTS根据sha1值,检测lua脚本是否被缓存到了内存中,如果在内存中则返回1,如果不在则返回0

127.0.0.1:6379> SCRIPT LOAD "return 'hello moto'"
"232fd51614574cf0867b83d384a5e898cfd24e5a"
127.0.0.1:6379> SCRIPT EXISTS 232fd51614574cf0867b83d384a5e898cfd24e5a
1) (integer) 1
127.0.0.1:6379> SCRIPT FLUSH
OK
127.0.0.1:6379> SCRIPT EXISTS 232fd51614574cf0867b83d384a5e898cfd24e5a
1) (integer) 0

 

五、SCRIPT FLUSH清空所有lua脚本缓存

127.0.0.1:6379> SCRIPT FLUSH
OK

 

六、SCRIPT KILL杀死当前正在运行的 Lua 脚本,当且仅当这个脚本没有执行过任何写操作时,这个命令才生效

session1:
EVAL "while true do end" 0

session2:
redis> SCRIPT KILL
OK
redis> SCRIPT KILL
(error) ERR Sorry the script already executed wrITe commands against the dataset. You can either wait the script termination or kill the server in an hard way using the SHUTDOWN NOSAVE command.

 

脚本宝典总结

以上是脚本宝典为你收集整理的redis eval全部内容,希望文章能够帮你解决redis eval所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。