Redis+lua进行类似秒杀的实现
发表于:2025-02-23 作者:千家信息网编辑
千家信息网最后更新 2025年02月23日,Redis+lua进行类似秒杀的实现由于项目需要,需要多线程去获取和修改数据库的库存,考虑到给数据库加锁效率低,所以采用redis+lua来进行实现 。redis的单线程操作特性来执行lua脚本,通过
千家信息网最后更新 2025年02月23日Redis+lua进行类似秒杀的实现
Redis+lua进行类似秒杀的实现
由于项目需要,需要多线程去获取和修改数据库的库存,考虑到给数据库加锁效率低,所以采用redis+lua来进行实现 。
redis的单线程操作特性来执行lua脚本,通过lua脚本来保证原子性。如果通过单纯的redis指令来进行更改,在读和写之间会存在多线程并发更新的问题。
1.首先定义redis数据结构
goodId: { "total":100, "released":0; }
- 其中goodId为商品id号,可根据此来查询相关的数据结构信息,total为总数,released为发放出去的数量,可使用数为total-released
2.编写lua脚本local n = tonumber(ARGV[1])if not n or n == 0 thenreturn 0endlocal vals = redis.call("HMGET", KEYS[1], "total", "released");local total = tonumber(vals[1])local blocked = tonumber(vals[2])if not total or not blocked thenreturn 0endif blocked + n <= total thenredis.call("HINCRBY", KEYS[1], "released", n)return n;endreturn 0
- 执行脚本命令`EVAL script_string 1 goodId apply_count`- 若库存足够则返回申请的数量,否则返回0,不返回可满足的剩余数3.spring boot 调用 - pom dependency
- java code```java long count = redisHelper.getStrCache().execute(new RedisCallback() { @Nullable @Override public Long doInRedis(RedisConnection redisConnection) throws DataAccessException { long ret = redisConnection.eval(script.getScriptAsString().getBytes(), ReturnType.INTEGER, 1, key.getBytes(), String.valueOf(count).getBytes()); return ret; } });
4.redis->database
针对redis到databases的更新,思考了很久,没有找到较好的解决办法,先采用定时任务异步更新。至于数据是否丢失的问题,如果redis挂了,重启后redis会恢复数据,等下次定时任务就可以将数据库中的数据保持一致,缺点是redis挂了秒杀活动会失败。
至于redis到database更新的如何驱动,列出两种愚见:
- redis存一份相关hash键名单表,通过读取名单表来读取更新
- 通过流式读取databases中的表来读取更新。
欢迎各位提出问题,谢谢您的阅读
数据
更新
脚本
数据库
线程
问题
任务
名单
库存
数据结构
数量
结构
一致
之间
信息
办法
原子
命令
商品
总数
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
软件开发与云平台云应用差别
济宁dell服务器多少钱
盘锦学网络技术
花亦山心之月新服务器
网络技术平台加盟
大兴区正规软件开发不二之选
重庆市网络安全网站
ef中实体怎样创建数据库表
欧洲网络安全局
网络技术在美术教学中的运用总结
华为手机的服务器在哪一个页面
深圳erp软件开发报价
联想ibm服务器无法启动
邮箱qq收件服务器怎么填
我的地球服务器怎么设置
浦东新区自动化软件开发厂家直销
图数据库titan 配置
华威大学网络安全管理就业
大富网络技术怎么样
怎么把握一个数据库的优点
温州浙南科技互联网大厦
多数据源支持不同数据库
夏梦mc服务器
app软件开发汉狮网络
服务器管理计算机名称
台州网络技术推广公司招聘
软件开发的是什么部门
浙江开源日志审计服务器
ftp服务器的设计与实现
java测试连接数据库