目标:怎么实现使用redis秒杀
秒杀可使用的思路
- 客户端层面考虑,限流,限制单个客户的抢购频率。
- 服务端层面考虑,加强校验,识别该用户是否真实用户,防止恶意刷单。
- 应用层面考虑的话,可以使用漏桶算法,和令牌桶算法
- 尽量把整个秒杀页面做成静态页面,尽可能把动态的数据缓存到redis里面
- 异步,抢购成功马上返回处理成功,剩下的后续逻辑由mq(队列)去处理,缓解服务器的峰值压力
- 分流,增加服务器数量,上集群,分散请求压力
秒杀
Redis限制一人一单
使用分布式锁,锁是一种保护机制,在多线程的情况下,保证数据操作的一致性
锁的产生
- 不跨线程共享变量,线程共享的变量改为地方法局部级变量
- 使状态变量为不可变的,使用final修饰(将变量变为常量)
- 在任何访问状态变量的时候使用同步,使用synchronized修饰方法,或使用同步代码块。
- 每个共享的可变变量都需要由唯一一个确定的锁保护。使用Lock锁。
分布式锁实现方式有三种
基于数据库;基于Zookeeper调度中心;基于Redis
分布式锁条件
实现分布式锁要满足3点:多进程可见,互斥,可重入。
Comments NOTHING