1、写作背景
在进行秒杀(即使不是秒杀),在高并发的购买情况下,会出现超卖现象,这个应该是完全不应该的,现在就进行避免
2、解决方案
- 1)使用数据库乐观锁,压力会转到mysql上
UPDATE T_SEC_GOODS SET NUM=NUM-#{num} WHERE SKU=#{sku} AND NUM-#{num}>0
- 2)使用redis先在缓存中判断库存有没有,如果库存够,再进行mysql数据更新
1)先从redis中查询数据,
2)判断库存数量
3)进行数据库更新操作
4)进行redis更新操作(一定在最后)
- 3)使用reids对频繁刷新的用户/IP 进行限制访问
1)每次访问的时候,对redis中的用户请求进行redis自增操作,如果太频繁就加入黑名单
2)操作的时候判断用户IP是否在很名单上
-
4)使用guava进行后端的访问流量限制
-
5)使用ActiveMQ进行削峰处理
-
6)使用内存变量进行判断
为了减少redis的访问,使用内存值进行判断
网友评论