一 redis 的扩展应用 lua
redis lua脚本语法
① 什么是脚本缓存
redis '缓存lua脚本'
说明: 重启redis,脚本缓存会'丢失'
下面讲解 'SCRIPT ...' 系列
SCRIPT
② LOAD
语法:SCRIPT LOAD 'lua代码' -->载入一个脚本,只是'预加载','不执行'
思考1: 何时'加载'? --> evalsha
SCRIPT LOAD "redis.call('SET', KEYS[1], ARGV[1]);\
redis.call('EXPIRE', KEYS[1], ARGV[2]); return 1;"
SCRIPT LOAD 加载'脚本',并得到'sha1值'
③ EXISTS
作用:
1、给定'一个或多个脚本'的 SHA1 校验和
2、返回一个包含 '0 或 1' 的列表,表示'校验和'所'指定的脚本'是否已经被保存'在缓存'当中
④ KILL
这个命令主要用于终止'运行时间过长'的脚本,比如一个因为 BUG 而发生无限 loop 的脚本,诸如此类.
语法: SCRIPT KILL 即可 --> '无多余'的参数
lua脚本的'最大运行'时间:是需要被'严格限制',单位是'毫秒':lua-time-limit 5000 '[5秒]'
1、lua脚本'死'循环
备注: 'redis6'+ 支持'多线程'
2、Script Kill 的'原理'
⑤ FLUSH
命令'格式':SCRIPT FLUSH
作用: '清除' redis服务端 '所有 Lua 脚本缓存'
⑥ DEBUG
redis 从 '3.2.0' 开始支持 Lua debugger,可以加'断点、print 变量信息、调试'正在执行代码
# 进入 debuge 模式
redis-cli --ldb --eval ./wzj.lua key1 key2 , arg1 arg2 arg3
⑦ EVALSHA
redis中缓存Lua 脚本
语法: EVALSHA sha1 numkeys 'key [key ...]' 'arg [arg ...]'
'案例'讲解
⑧ EVAL和EVALSHA区别
1、eval执行的脚本'不从缓存里拿[一次性消耗品]'
2、而'evalsha'执行的脚本'从缓存'拿,后跟'sha1校验码'从服务器'缓存里拿'
⑨ pipeline和lua的区别