CC00028.Redis——|Hadoop&Redis.V04|——|Redis.v04|lua脚本与Redis整合应用.v02|

一、EVAL/EVALSHA命令实现
### --- EVAL命令
~~~     通过执行redis的eval命令,可以运行一段lua脚本

EVAL script numkeys key [key ...] arg [arg ...]
### --- 命令说明:

~~~     script参数:是一段Lua脚本程序,它会被运行在Redis服务器上下文中,这段脚本不必(也不应该)定义为一个Lua函数。
~~~     numkeys参数:用于指定键名参数的个数。
~~~     key [key ...]参数: 从EVAL的第三个参数开始算起,使用了numkeys个键(key),表示在脚本中
~~~     所用到的那些Redis键(key),这些键名参数可以在Lua中通过全局变量KEYS数组,用1为基址的形式访问( KEYS[1] , KEYS[2] ,以此类推)。
~~~     arg [arg ...]参数:可以在Lua中通过全局变量ARGV数组访问,访问的形式和KEYS变量类似(ARGV[1] 、 ARGV[2] ,诸如此类)。
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"
二、lua脚本中调用Redis命令
### --- redis.call():
~~~     返回值就是redis命令执行的返回值
~~~     如果出错,则返回错误信息,不继续执行

### --- redis.pcall():
~~~     返回值就是redis命令执行的返回值
~~~     如果出错,则记录错误信息,继续执行
### --- 注意事项
~~~     在脚本中,使用return语句将返回值返回给客户端,如果没有return,则返回nil

127.0.0.1:6379> eval "return redis.call('set',KEYS[1],ARGV[1])" 1 n1 zhaoyun
OK
### --- EVALSHA

~~~     EVAL 命令要求你在每次执行脚本的时候都发送一次脚本主体(script body)。
~~~     Redis 有一个内部的缓存机制,因此它不会每次都重新编译脚本,不过在很多场合,
~~~     付出无谓的带宽来传送脚本主体并不是最佳选择。
~~~     为了减少带宽的消耗, Redis 实现了 EVALSHA 命令,它的作用和 EVAL 一样,
~~~     都用于对脚本求值,但它接受的第一个参数不是脚本,而是脚本的 SHA1 校验和(sum)
### --- SCRIPT命令

~~~     SCRIPT FLUSH :清除所有脚本缓存
~~~     SCRIPT EXISTS :根据给定的脚本校验和,检查指定的脚本是否存在于脚本缓存
~~~     SCRIPT LOAD :将一个脚本装入脚本缓存,返回SHA1摘要,但并不立即运行它
### --- SCRIPT KILL :杀死当前正在运行的脚本

127.0.0.1:6379> eval "return redis.call('set',KEYS[1],ARGV[1])" 1 n1 zhaoyun
OK
127.0.0.1:6379> script load "return redis.call('set',KEYS[1],ARGV[1])"
"c686f316aaf1eb01d5a4de1b0b63cd233010e63d"
127.0.0.1:6379> evalsha c686f316aaf1eb01d5a4de1b0b63cd233010e63d 1 n2 caocao
OK
127.0.0.1:6379>  get n2
"caocao"
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yanqi_vip

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值