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. 脚本一但注册会被服务器编译存在起来,省去每次编译的时间。
相关推荐
DBWYX14 分钟前
redis
java·redis·mybatis
〆、风神26 分钟前
从零搭建高可用分布式限流组件:设计模式与Redis令牌桶实践
redis·分布式·设计模式
未来会更好yes9 小时前
Centos 7.6安装redis-6.2.6
linux·redis·centos
熏鱼的小迷弟Liu11 小时前
【Redis】Redis Zset实现原理:跳表+哈希表的精妙设计
数据库·redis·散列表
观无14 小时前
Redis远程链接应用案例
数据库·redis·缓存·c#
好想有猫猫16 小时前
【Redis】服务端高并发分布式结构演进之路
数据库·c++·redis·分布式·缓存
孔令飞17 小时前
使用 Go 与 Redis Streams 构建可靠的事件驱动系统
redis·ai·云原生·golang·kubernetes
yuanlaile17 小时前
Go全栈_Golang、Gin实战、Gorm实战、Go_Socket、Redis、Elasticsearch、微服务、K8s、RabbitMQ全家桶
linux·redis·golang·k8s·rabbitmq·gin
高效匠人17 小时前
FastAPI + Redis Pub/Sub + WebSocket 组合解决方案的详细介绍
redis·websocket·fastapi
lovebugs18 小时前
Redis的高性能奥秘:深入解析IO多路复用与单线程事件驱动模型
redis·后端·面试