栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

koa超卖解决之分布式锁

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

koa超卖解决之分布式锁

这里写自定义目录标题
解决超卖问题:()
apache benchmark:模拟并发请求
Redis:存储库存,用Redis 列表的长度来记录生成了多少订单
压力测试:
ab -c 10 -n 1000 http://localhost:4000/
> llen orders
要处理这个问题有三种方法:
1判断 incrby 命令的返回值
可以直接判断返回值是否大于 0 来判断是否抢购成功,不再需要 get 命令
实现代码:先判断如果redis.incrby由商品id加-1到商品上,即减少一个商品,随后调用redis.rpush由订单号是的订单加1
2使用 lua 脚本让 Redis 命令具有原子性
实现代码:在redis.defineCommand中写上网上的lua脚本,之后如果已经由商品id创建了订单则进行减库存,并且调用redis.rush由订单号创建订单。
3使用 Redis 的 rpop 命令只需要判断是否有数据能 pop 出来
调用redis.lpop根据商品id进行减库存,并调用redis.rpush根据订单id将订单插入到订单表中。
使用分布式锁也可以解决超卖的问题,我们可以基于 Redis 和 zookeeper 实现分布式锁(使用 go 开发的同学也可以使用 etcd 实现分布式锁)
基于 Redis 实现分布式锁有比较难实现阻塞的缺点,因为不是阻塞所以并不是先到先得,在秒杀时会出现后支付的用户越过前面支付的用户购买成功的情况。
而基于 zookeeper 实现分布式锁有下面两个缺点:
1 java程序员和熟悉kafka的程序员比较熟悉,其他语言的使用者需要一定的学习成本
2 引入了新的中间件,提高了维护成本

转载添加链接描述

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/771136.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号