redis运维(二十)redis 的扩展应用 lua(二)

一  redis 的扩展应用 lua

redis lua脚本语法

①  什么是脚本缓存

redis '缓存lua脚本'

redis运维(二十)redis 的扩展应用 lua(二)_第1张图片

说明: 重启redis,脚本缓存会'丢失'

redis运维(二十)redis 的扩展应用 lua(二)_第2张图片

下面讲解 '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值'

redis运维(二十)redis 的扩展应用 lua(二)_第3张图片

③  EXISTS

作用:

  1、给定'一个或多个脚本'的 SHA1 校验和

  2、返回一个包含 '0 或 1' 的列表,表示'校验和'所'指定的脚本'是否已经被保存'在缓存'当中

redis运维(二十)redis 的扩展应用 lua(二)_第4张图片

redis运维(二十)redis 的扩展应用 lua(二)_第5张图片

④  KILL

这个命令主要用于终止'运行时间过长'的脚本,比如一个因为 BUG 而发生无限 loop 的脚本,诸如此类.

redis运维(二十)redis 的扩展应用 lua(二)_第6张图片

 

语法: SCRIPT KILL 即可  --> '无多余'的参数

lua脚本的'最大运行'时间:是需要被'严格限制',单位是'毫秒':lua-time-limit 5000 '[5秒]'

redis运维(二十)redis 的扩展应用 lua(二)_第7张图片 

redis运维(二十)redis 的扩展应用 lua(二)_第8张图片

1、lua脚本'死'循环

备注: 'redis6'+ 支持'多线程'

redis运维(二十)redis 的扩展应用 lua(二)_第9张图片

2、Script Kill 的'原理'

redis运维(二十)redis 的扩展应用 lua(二)_第10张图片

redis运维(二十)redis 的扩展应用 lua(二)_第11张图片

⑤  FLUSH

命令'格式':SCRIPT FLUSH

作用: '清除' redis服务端 '所有 Lua 脚本缓存'

redis运维(二十)redis 的扩展应用 lua(二)_第12张图片

⑥  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 ...]'

redis运维(二十)redis 的扩展应用 lua(二)_第13张图片

redis运维(二十)redis 的扩展应用 lua(二)_第14张图片

'案例'讲解

redis运维(二十)redis 的扩展应用 lua(二)_第15张图片

⑧  EVAL和EVALSHA区别

1、eval执行的脚本'不从缓存里拿[一次性消耗品]'

2、而'evalsha'执行的脚本'从缓存'拿,后跟'sha1校验码'从服务器'缓存里拿'

redis运维(二十)redis 的扩展应用 lua(二)_第16张图片

⑨  pipeline和lua的区别


 

你可能感兴趣的:(redis,redis,运维,lua,SCRIPT,EVALSHA)