微服务 Spring Boot 整合Redis 实现优惠卷秒杀 一人一单

文章目录
一、什么是全局唯一ID
⛅全局唯一ID
⚡Redis实现全局唯一ID
二、环境准备
三、实现秒杀下单
四、库存超卖问题
⏳问题分析
⌚ 乐观锁解决库存超卖
✅Jmeter 测试
五、优惠卷秒杀 实现一人一单
⛵小结
一、什么是全局唯一ID
⛅全局唯一ID
在分布式系统中,经常需要使用全局唯一ID查找对应的数据。产生这种ID需要保证系统全局唯一,而且要高性能以及占用相对较少的空间。

全局唯一ID在数据库中一般会被设成主键,这样为了保证数据插入时索引的快速建立,还需要保持一个有序的趋势。

这样全局唯一ID就需要保证这两个需求:

全局唯一
趋势有序
我们的场景是 优惠卷秒杀抢购, 当用户抢购时,就会生成订单 并保存到 数据库 的订单表中,而订单表 如果使用数据库自增ID就会存在以下问题

id的规律性太明显
受单表数据量限制
场景分析:如果我们的id具有太明显的规则,用户或者说商业对手很容易猜测出来我们的一些敏感信息,比如商城在一天时间内,卖出了多少单,这明显不合适。

场景分析二: 随着我们商城规模越来越大,MySQL 的单表的容量不宜超过500W,数据量过大之后,我们要进行拆库拆表,但拆分表了之后,他们从逻辑上讲他们是同一张表,所以他们的id是不能一样的, 于是乎我们需要保证id的唯一性。

全局ID生成器,是一种在分布式系统下用来生成全局唯一ID的工具,一般要满足下列特性:

为了增加ID的安全性,我们可以不直接使用Redis自增的数值,而是拼接一些其它信息:

猜你喜欢

转载自blog.csdn.net/gaowenhui2008/article/details/127230307