RedisTemplate使用Lua脚本例子(Redis原子操作)

本文介绍了从Redis 2.6.0版本开始利用内置Lua解释器进行原子操作的方法,通过RedisTemplate调用Lua脚本实现红包库存消耗的示例。推荐独立编写脚本并预置于Redis中,详细展示了如何执行Java代码来测试和修改Redis值。文中还提醒了lua数值比较需要注意转换为tonumber以及返回值类型选择Long。对于更复杂的操作,建议参考Redis命令和Lua语法。
摘要由CSDN通过智能技术生成

前言

Redis 2.6.0 版本开始,可通过内置的 Lua 解释器,使 EVAL 命令对 Lua 脚本进行求值。参考 Redis官网

redis对lua脚本的调用是原子性的,所以一些特殊场景,可以放在lua中实现

例子

本文记录使用 redistemplate 调用 lua 脚本,实现红包的库存消耗操作。

使用到的红包 redis 结构为Map

int id = 1;
String redisKey = RepacketItem.class_id_{
   id}_today;
Map<Integer> redisValue = new HashMap();
/** map 结构
 { 
	int money;  // 红包金额
	int todayLimit; //今天可发放上限数量,           
	int todayUsed; //今天已发放数,           
	int totalRmain; //红包剩余库存
}
**/	

lua脚本功能:当今天已发放库存+n>今天发放限量,更新n个库存,详见脚本

一、独立编写脚本使用 (推荐)

  1. 准备lua 脚本
--resource/redis/decrStock.lua
local todayUsed = tonumber(redis.call('HGET',KEYS[1],'todayUsed'))
local todayLimit = tonumber(redis.call('HGET',KEYS[1],'todayLimit'))
local n = tonumber(ARGV[1])

if todayLimit >= todayUsed + n then
  redis.call('HINCRBY',
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值