Redis+lua进行类似秒杀的实现
发表于:2025-01-22 作者:千家信息网编辑
千家信息网最后更新 2025年01月22日,Redis+lua进行类似秒杀的实现由于项目需要,需要多线程去获取和修改数据库的库存,考虑到给数据库加锁效率低,所以采用redis+lua来进行实现 。redis的单线程操作特性来执行lua脚本,通过
千家信息网最后更新 2025年01月22日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安全错误
数据库的锁怎样保障安全
北京梦想站网络技术有限公司
服务器配置 未启用
信息科技开展网络安全宣讲
数据库输入数据时报错
软件开发公司的销售场景
贵阳职业技术学院网络安全
网络安全教育主题班会图片大全
数据库插入工具
远程血压计软件开发
域安全数据库
武强软件开发项目管理
福州学生网络安全
甘孜网络技术销售价格
数据库关系运算有哪几种
数据库同步和表同步
蓝鸽科技服务器多少一台
access数据库的窗体设计
数据库同时写入数据
服务器安全狗 云锁
苏州回收惠普服务器内存条
药物敏感试验判断标准数据库
5G网络技术考证
域安全数据库
战地5怎么搜索别人的服务器
魔兽服务器登陆不上
上海梦蚁网络技术
数据库语言打印n层金字塔
闻道网络安全
南京软件开发前端
房屋销售管理系统数据库单表查询