Redis 执行Lua脚本
1. 简介
"Redis Lua是一种在Redis中使用的轻量级、高效的脚本语言,用于实现复杂操作和保证操作的原子性。
优点
- 大量减少
Redis客户端
与Redis服务器
的RTT时间。 - 降低
Redis客户端
与Redis服务器
的宽带压力,很多数据不需要传回Redis客户端
直接在Redis服务端
处理。
缺点
- 大量使用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
优点
- 节省每次脚本传输的带宽。
- 脚本一但注册会被服务器编译存在起来,省去每次编译的时间。