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. 脚本一但注册会被服务器编译存在起来,省去每次编译的时间。
相关推荐
半个落月3 分钟前
Next.js 16 笔记应用实战:Redis 数据链路与组件两版拆分详解
前端·redis·next.js
家有娇妻张兔兔1 小时前
Redis 报错 “MISCONF Redis is configured to save RDB snapshots“?一文讲透根因与根除方案
数据库·redis·故障排查·misconf
一嘴一个橘子2 小时前
SpringDataRedis 操作 redis
java·redis
敲上瘾3 小时前
Redis持久化存储机制:从RDB到AOF再到混合持久化的配置与实践
linux·数据库·redis·缓存
正儿八经的少年11 小时前
布隆过滤器(解决redis缓存穿透步骤之一)
数据库·redis·缓存
宠友信息18 小时前
内容社区源码开发实践解析,用Spring Boot打造1:1仿小红书源码平台
java·spring boot·redis·websocket·mysql·spring·uni-app
hweiyu0018 小时前
Redis命令:GET
redis
Su米苏18 小时前
Redis高级用法
spring boot·redis
fatcoder1 天前
玩转 Redis · Set 篇
前端·redis·后端
FfHUCisI1 天前
Golang Redis 分布式锁
redis·分布式·golang