Redis 执行Lua脚本

Redis 执行Lua脚本

1. 简介

"Redis Lua是一种在Redis中使用的轻量级、高效的脚本语言,用于实现复杂操作和保证操作的原子性。

优点

  1. 大量减少Redis客户端Redis服务器的RTT时间。
  2. 降低Redis客户端Redis服务器的宽带压力,很多数据不需要传回Redis客户端直接在Redis服务端处理。

缺点

  1. 大量使用Lua脚本可能会增加复杂性。

2. 直接执行

py 复制代码
import redis

r = redis.Redis(host='localhost', port=6379, db=0)

# 准备数据
r.set("num1", 1, ex=3)
r.set("num2", 2, ex=3)

lua_script = """  
local key1 = KEYS[1]  
local key2 = KEYS[2]  
local value1 = redis.call('get', key1)  
local value2 = redis.call('get', key2)  
if value1 == false or value2 == false then  
    return 0  
end  
return tonumber(value1) + tonumber(value2)  
"""
# 执行
result = r.eval(lua_script, 2, 'num1', 'num2')
# 输出结果
print(result)  # 3

3. 提前注册

py 复制代码
import redis

r = redis.Redis(host='localhost', port=6379, db=0)

lua_script = """  
local key1 = KEYS[1]  
local key2 = KEYS[2]  
local value1 = redis.call('get', key1)  
local value2 = redis.call('get', key2)  
if value1 == false or value2 == false then  
    return 0  
end  
return tonumber(value1) + tonumber(value2)  
"""

# 注册脚本
script = r.register_script(lua_script)

# 准备数据
r.set("num1", 1, ex=3)
r.set("num2", 2, ex=3)

# 执行
result = script(keys=['num1', 'num2'])
print(result)  # 3

优点

  1. 节省每次脚本传输的带宽。
  2. 脚本一但注册会被服务器编译存在起来,省去每次编译的时间。
相关推荐
希忘auto6 分钟前
详解Redis的常用命令
redis·1024程序员节
岁月变迁呀7 小时前
Redis梳理
数据库·redis·缓存
努力--坚持8 小时前
电商项目-网站首页高可用(一)
nginx·lua·openresty
Code apprenticeship9 小时前
怎么利用Redis实现延时队列?
数据库·redis·缓存
百度智能云技术站9 小时前
广告投放系统成本降低 70%+,基于 Redis 容量型数据库 PegaDB 的方案设计和业务实践
数据库·redis·oracle
装不满的克莱因瓶9 小时前
【Redis经典面试题六】Redis的持久化机制是怎样的?
java·数据库·redis·持久化·aof·rdb
黄名富13 小时前
Redis 附加功能(二)— 自动过期、流水线与事务及Lua脚本
java·数据库·redis·lua
G_whang13 小时前
centos7下docker 容器实现redis主从同步
redis·docker·容器
.生产的驴14 小时前
SpringBoot 对接第三方登录 手机号登录 手机号验证 微信小程序登录 结合Redis SaToken
java·spring boot·redis·后端·缓存·微信小程序·maven
染指111017 小时前
50.第二阶段x86游戏实战2-lua获取本地寻路,跨地图寻路和获取当前地图id
c++·windows·lua·游戏安全·反游戏外挂·游戏逆向·luastudio