Redis与Lua脚本

使用

基本语法

redis 127.0.0.1:6379> EVAL script numkeys key [key ...] arg [arg ...]

 参数说明

  • script: 参数是一段 Lua 5.1 脚本程序。脚本不必(也不应该)定义为一个 Lua 函数。
  • numkeys: 用于指定键名参数的个数。
  • key [key ...] : 从 EVAL 的第三个参数开始算起,表示在脚本中所用到的那些 Redis 键(key),这些键名参数可以在 Lua 中通过全局变量 KEYS 数组,用 1 为基址的形式访问( KEYS[1] , KEYS[2] ,以此类推)。
  • arg [arg ...] : 附加参数,在 Lua 中通过全局变量 ARGV 数组访问,访问的形式和 KEYS 变量类似( ARGV[1] 、 ARGV[2] ,诸如此类)

例子

addup:0>eval "return {KEYS[1],KEYS[2],KEYS[3],ARGV[1],ARGV[2],ARGV[3]}" 3 username age sex kong 24 男
 1)  "username"
 2)  "age"
 3)  "sex"
 4)  "kong"
 5)  "24"
 6)  "男"

addup:0>eval "return KEYS[2]" 2 kong1 kong2
"kong2"

使用redis.call()去调用redis的命令 

-- 插入key:name value:kong的键值对,并get
addup:0>eval "return {redis.call('set',KEYS[1],ARGV[1]),redis.call('get',KEYS[2])}" 2 name name kong
 1)  "OK"
 2)  "kong"

-- 在上面的基础上再设置过期时间
addup:0>eval "return {redis.call('set',KEYS[1],ARGV[1]),redis.call('expire',KEYS[2],ARGV[2])}" 2 name name kong 12
 1)  "OK"
 2)  "1"
addup:0>ttl name
"2"

将脚本缓存起来,不执行。SCRIPT LOAD script

执行缓存的脚本。EVALSHA sha1 numkeys key [key …] arg [arg …]

判断脚本是否已经被缓存。SCRIPT EXISTS

清空所有脚本缓存。使用SCRIPT FLUSH

杀死当前正在运行的 Lua 脚本。SCRIPT KILL

addup:0>script load "redis.call('set',KEYS[1],ARGV[1]);redis.call('expire',KEYS[1],ARGV[2]);return 1;"
"b53db7fdd933555fba818bbdb07d30d0701b3fad"
addup:0>evalsha b53db7fdd933555fba818bbdb07d30d0701b3fad 1 name kong 60
"1"
addup:0>get name
"kong"
addup:0>ttl name
"51"
addup:0>SCRIPT EXISTS b53db7fdd933555fba818bbdb07d30d0701b3fad
 1)  "1"
addup:0>SCRIPT FLUSH
"OK"
addup:0>SCRIPT EXISTS b53db7fdd933555fba818bbdb07d30d0701b3fad
 1)  "0"

 执行Lua脚本

--执行的.lua脚本文件
local key = KEYS[1]
local val = redis.call('get', key);
 
if val == ARGV[1]
then
        redis.call('set', KEYS[1], ARGV[2])
        return 1
else
        return 0
end
addup:0>set name kong
"OK"
addup:0>get name
"kong"
addup:0>ttl name
"-1"

cmd执行脚本

C:\Users\卑已自牧也>d:

D:\>cd Redis

D:\Redis>redis-cli.exe --eval D:\code\test.lua name , kong lalalala
(integer) 1

验证

addup:0>get name
"lalalala"

挖个坑

SpringBoot集成Redis调用Lua脚本

后续补充...

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
RedisLua脚本是一种在Redis中执行操作的脚本语言。它允许用户通过Lua脚本执行一系列的Redis操作,包括读取、写入和删除数据等。RedisLua脚本具有以下特点: 1. 原子性:RedisLua脚本在执行过程中是原子的,它们要么全部执行成功,要么全部不执行。 2. 可重用性:Lua脚本可以被缓存和重复使用,提高执行效率。 3. 灵活性:Lua脚本支持逻辑控制语句、循环和函数等高级特性,可以实现复杂的业务逻辑。 4. 安全性:Lua脚本可以通过Redis的安全机制进行权限控制,确保脚本的执行安全。 5. 扩展性:RedisLua脚本可以通过调用Redis提供的API扩展其功能。 RedisLua脚本执行流程包括加载脚本、编译脚本和执行脚本三个步骤。在加载脚本阶段,Redis会将脚本加载到内存中,并对其进行缓存,以提高执行效率。在编译脚本阶段,Redis会对脚本进行语法检查和编译。在执行脚本阶段,Redis会按照预定的执行流程执行脚本中的命令,并返回执行结果。 RedisLua脚本在实际应用中有许多场景,包括但不限于: 1. 原子性操作:通过Lua脚本可以实现多个Redis操作的原子性,例如加锁、解锁、事务操作等。 2. 复杂数据处理:通过Lua脚本可以对Redis中的数据进行复杂的处理和计算,例如排序、过滤、聚合等。 3. 分布式锁:通过Lua脚本可以实现分布式锁,保证多个客户端之间的数据的一致性和原子性。 4. 实时计算:通过Lua脚本可以进行实时计算,例如统计、推荐算法等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值