高并发布商品
- 容易产生抖动
- 缓存的处理本地缓存 + 分布式缓存
何为抖动
程序被高频率的触发N次,产生N次事件
如何防止抖动
- 结合RedisSon为当前用户进行加锁操作
boolean isLockSuccess = RLock.tryLock(500, 1000, TimeUnit.MILLISECONDS);
进行防抖操作
获取商品
- 容易把数据库打垮
缓存:直接通过内存进行读取,减少与数据库的交互IO
缓存为何使用本地 + 分布式缓存(Redis)
- 本地缓存 + Version: 可以减少远端的IO操作
- 分布式缓存:协调和同步存最新数据到本地缓存
缓存设计的一般性原则(秦二爷)
- 热点数据一律进缓存;
- 缓存场景一律采取本地缓存+分布式缓存的综合方案;
- 优先读取本地缓存,以本地缓存为主,远端分布式缓存为辅
- 所有缓存设置过期时间,本地缓存过期时间控制在秒级;
- 本地缓存务必同时设置容量驱逐和时间驱逐两种方式;
- 缓存KEY具有业务可读性,杜绝不同场景出现相同KEY;
- 缓存列表数据时,仅缓存第一页,缓存数量不超过20;
- 杜绝并发更新缓存,防止缓存击穿;
- 空数据进缓存,防止缓存穿透;
- 读数据时,先读缓存,再读数据库;
- 写数据时,先写数据库,再写缓存。