Redis07-秒杀
全局唯一ID
一般的订单会出什么问题呢?
第一点:数据量大
第二点:要具备唯一性(数据量过大时分表,可能出现重复id的问题)
因此要使用==全局唯一ID==在分布式系统下用来生成全局唯一ID的工具
需要满足:
- 唯一性
- 高可用
- 高性能
- 递增性(有利于索引和插入)Redis的incr
- 安全性(自增不能规律过于明显)
为了增加ID的安全性,我们可以不直接使用Redis自增的数值,而是拼接一些其它信息:
全局唯一ID生成策略:.
- UUID
- Redis自增snowflake算法
- 数据库自增
- Redis自增ID策略:
- 每天一个key,方便统计订单量.
- ID构造是时间戳+计数器
下单时需要判断两点:
- 秒杀是否开始或结束,如果尚未开始或已经结束则无法下单
- 库存是否充足,不足则无法下单
==高并发情况下会出现超卖==
乐观锁的实现方式:
- 版本号法
- CAS
1.悲观锁:添加同步锁,让线程串行执行
优点:简单粗暴
缺点:性能一般
2.乐观锁:不加锁,在更新时判断是否有其它线程在修改
- 优点∶性能好
- 缺点∶存在成功率低的问题
修改秒杀业务,要求同一个优惠券,一个用户只能下一单
p54
集群下的并发安全问题
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 玖!
评论