6.1 Evalsha 和LOAD 命令
- Redis Script Load 命令用于将脚本 script 添加到脚本缓存中,但并不立即执行这个脚本
- 脚本可以在缓存中保留无限长的时间,直到执行 SCRIPT FLUSH 为止。
- Redis Evalsha 命令根据给定的 sha1 校验码,执行缓存在服务器中的脚本。
- 将脚本缓存到服务器的操作可以通过 SCRIPT LOAD 命令进行。
- 这个命令的其他地方,比如参数的传入方式,都和 EVAL 命令一样
redis-cli
127.0.0.1:6379> eval "redis.call('set',KEYS[1],ARGV[2])" 2 key1 key2 value1 value2
(nil)
127.0.0.1:6379> get key1
"value2"
127.0.0.1:6379> SCRIPT LOAD "redis.call('set',KEYS[1],ARGV[2])" # 载入一个脚本
"3f9495b29eea0437ce3e9fe1a6f36277d7e6f361"
127.0.0.1:6379> EVALSHA 3f9495b29eea0437ce3e9fe1a6f36277d7e6f361 2 key1 key2 bian1 bian2
(nil)
127.0.0.1:6379> get key1
"bian2"
6.2 Redis Script Exists 和Flush命令
- Redis Script Exists 命令用于校验指定的脚本是否已经被保存在缓存当中。
- Redis Script Flush 命令用于清除所有 Lua 脚本缓存。
127.0.0.1:6379> SCRIPT EXISTS 3f9495b29eea0437ce3e9fe1a6f36277d7e6f361
1) (integer) 1
127.0.0.1:6379> SCRIPT FLUSH # 清空缓存
OK
127.0.0.1:6379> SCRIPT EXISTS 3f9495b29eea0437ce3e9fe1a6f36277d7e6f361
1) (integer) 0
127.0.0.1:6379>
6.3 Script kill 命令
- Redis Script kill 命令用于杀死当前正在运行的 Lua 脚本,当且仅当这个脚本没有执行过任何写操作时,这个命令才生效。
- 这个命令主要用于终止运行时间过长的脚本,比如一个因为 BUG 而发生无限循环的脚本。
- SCRIPT KILL 执行之后,当前正在运行的脚本会被杀死,执行这个脚本的客户端会从 EVAL 命令的阻塞当中退出,并收到一个错误作为返回值。
redis 127.0.0.1:6379> SCRIPT KILL
OK