《Redis使用手册之Lua脚本》

本文详细介绍了如何在Redis中使用EVAL和EVALSHA命令执行Lua脚本,包括script参数、numkeys和KEYS/ARGV数组的应用,以及SCRIPTLOAD和缓存机制,以减少网络带宽消耗。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

《Redis使用手册之Lua脚本》

EVAL:执行脚本

  • 127.0.0.1:6379> eval “return ‘hello world’” 0
    “hello world”

    127.0.0.1:6379> eval “return redis.call(‘set’,KEYS[1],ARGV[1])” 1 “message” “hello world”
    OK
    127.0.0.1:6379> get message
    “hello world”

    EVAL:执行脚本

    EVAL script numkeys key [key …] arg [arg …]

    script参数用于传递脚本本身。

    numkeys参数用于指定脚本需要处理的键数量,根据Lua的惯例,

    KEYS数组的索引将以1为开始:访问KEYS[1]可以取得第一个传入的key参数,访问KEYS[2]可以取得第二个传入的key参数,以此类推。 任意多个arg参数用于指定传递给脚本的附加参数,这些脚本可以在脚本中通过ARGV数组进行访问,与KEYS参数一样,ARGV数组的索引也是以1为开始的。

    使用脚本执行Redis命令

    redis.call(command, …)

    redis.pcall(command, …)

    这两个函数接受的第一个参数都是被执行的Redis命令的名字,而后面跟着的则是任意多个命令参数。

    在lua脚本中执行Redis命令所使用的格式与redis-cli客户端中执行Redis命令所使用的格式是完全一样的。

    EVAL:执行脚本

SCRIPT LOAD和EVALSHA:缓存并执行脚本

  • 127.0.0.1:6379> script load “return ‘hello world’”
    “5332031c6b470dc5a0dd9b4bf2030dea6d65de91”
    127.0.0.1:6379> script load “redis.call(‘SET’,KEYS[1],ARGV[1]); return redis.call(‘GET’,KEYS[1])”
    “27f72464d4122016431244ae33526a5fb72014f3”
    127.0.0.1:6379> evalsha “5332031c6b470dc5a0dd9b4bf2030dea6d65de91” 0
    “hello world”
    127.0.0.1:6379> evalsha “27f72464d4122016431244ae33526a5fb72014f3” 1 “msg”

    127.0.0.1:6379> evalsha “27f72464d4122016431244ae33526a5fb72014f3” 1 “msg” “Ciao!”
    “Ciao!”
    127.0.0.1:6379> script exists 27f72464d4122016431244ae33526a5fb72014f3 5332031c6b470dc5a0dd9b4bf2030dea6d65de91

    (integer) 1

    (integer) 1
    127.0.0.1:6379> script flush
    OK
    127.0.0.1:6379> script exists 27f72464d4122016431244ae33526a5fb72014f3 5332031c6b470dc5a0dd9b4bf2030dea6d65de91

    (integer) 0

    (integer) 0
    127.0.0.1:6379> script kill

    SCRIPT LOAD和EVALSHA:缓存并执行脚本

    SCRIPT LOAD script

    用户通过EVALSHA命令来执行已被缓存的脚本

    EVALSHA sha1 numkeys key[key …] arg[arg …]
    在这里插入图片描述

    除了第一个参数接受的事Lua脚本对应的SHA1校验和而不是脚本本身之外,EVALSHA命令的其他参数与EVAL命令的参数都是相同的。

    除了SCRIPT LOAD之外,EVAL命令在执行完脚本之后也会把被执行的脚本缓存起来,以供之后使用。

    通过Lua脚本缓存,我们可以将需要重复执行的Lua脚本缓存在服务器中,然后通过EVALSHA命令来执行已缓存的脚本,从而将执行Lua脚本所需耗费的网络带宽降至最低。

    SCRIPT LOAD和EVALSHA:缓存并执行脚本

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

one 大白(●—●)

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

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

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

打赏作者

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

抵扣说明:

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

余额充值