全局唯一ID

一般的订单会出什么问题呢?

第一点:数据量大

第二点:要具备唯一性(数据量过大时分表,可能出现重复id的问题)

因此要使用==全局唯一ID==在分布式系统下用来生成全局唯一ID的工具

需要满足:

  • 唯一性
  • 高可用
  • 高性能
  • 递增性(有利于索引和插入)Redis的incr
  • 安全性(自增不能规律过于明显)

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

Redis07-01全局唯一ID

全局唯一ID生成策略:.

  • UUID
  • Redis自增snowflake算法
  • 数据库自增
  • Redis自增ID策略:
    • 每天一个key,方便统计订单量.
    • ID构造是时间戳+计数器

下单时需要判断两点:

  • 秒杀是否开始或结束,如果尚未开始或已经结束则无法下单
  • 库存是否充足,不足则无法下单

Redis07-02秒杀流程

==高并发情况下会出现超卖==

Redis07-02超卖

Redis07-03悲观锁与乐观锁

乐观锁的实现方式:

  • 版本号法
  • CAS

1.悲观锁:添加同步锁,让线程串行执行

  • 优点:简单粗暴

  • 缺点:性能一般

2.乐观锁:不加锁,在更新时判断是否有其它线程在修改

  • 优点∶性能好
  • 缺点∶存在成功率低的问题

修改秒杀业务,要求同一个优惠券,一个用户只能下一单

p54

集群下的并发安全问题

image-20230706150459403