Redis秒杀

发布于 2023-10-15  109 次阅读


目标:怎么实现使用redis秒杀

秒杀可使用的思路

  1. 客户端层面考虑,限流,限制单个客户的抢购频率。
  2. 服务端层面考虑,加强校验,识别该用户是否真实用户,防止恶意刷单。
  3. 应用层面考虑的话,可以使用漏桶算法,和令牌桶算法
  4. 尽量把整个秒杀页面做成静态页面,尽可能把动态的数据缓存到redis里面
  5. 异步,抢购成功马上返回处理成功,剩下的后续逻辑由mq(队列)去处理,缓解服务器的峰值压力
  6. 分流,增加服务器数量,上集群,分散请求压力

秒杀

Redis限制一人一单

使用分布式锁,锁是一种保护机制,在多线程的情况下,保证数据操作的一致性

锁的产生

  • 不跨线程共享变量,线程共享的变量改为地方法局部级变量
  • 使状态变量为不可变的,使用final修饰(将变量变为常量)
  • 在任何访问状态变量的时候使用同步,使用synchronized修饰方法,或使用同步代码块。
  • 每个共享的可变变量都需要由唯一一个确定的锁保护。使用Lock锁。

分布式锁实现方式有三种

基于数据库;基于Zookeeper调度中心;基于Redis

分布式锁条件

实现分布式锁要满足3点:多进程可见,互斥,可重入。


间歇性凌云壮志,持续性混吃等死