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. 脚本一但注册会被服务器编译存在起来,省去每次编译的时间。
相关推荐
凤山老林9 小时前
Spring Boot 集成 Redis Stream 做可靠消息队列:持久化、消费组重组与流式处理实战
spring boot·redis·后端
贾宝玉的玉宝贾10 小时前
FreeSWITCH 简单图形化界面 70 - 监听/密语的lua脚本
开发语言·junit·lua·voip·freeswitch·sip·ippbx
行百里er10 小时前
常见的 Redis 面试题
redis
鱼宵12 小时前
LangChain4j 生产化改造:记忆落 Redis、向量落 ES,重启再也不丢
数据库·redis·elasticsearch·langchain4j
码匠许师傅14 小时前
【C++三方组件】redis-plus-plus:现代 Redis C++ 客户端
java·c++·redis
豆角焖肉15 小时前
SpringBoot + Redis 缓存实战
java·spring boot·redis·后端·缓存·菜单缓存
来福猿15 小时前
分布式锁 Redis 实现源码分析:SETNX、过期时间与可重入设计
数据库·redis·分布式
行百里er1 天前
Redis 模块——JSON、向量搜索与时序
redis·后端
蓝胖的四次元口袋1 天前
Redis知识梳理(1)
数据库·redis·缓存
wefg11 天前
【Redis】C++ 自定义客户端
数据库·redis·缓存