- 缓存热数据
- 缓存读写顺序:读,先缓存,后数据库;写,先数据库,后缓存
- 所有缓存数据都应该设置过期时间
- 缓存的过期时间应该避免集中过期,造成缓存击穿
- 缓存key具备可读性,应避免不同业务出现同名的key,简单缩写可节省内存空间
- 避免缓存穿透,数据库中查不到的数据,可在Redis中设置空值,以避免缓存无数据而每次达到数据库
- 缓存预热,上线之前可预先将数据写入缓存中
- 数据一致性问题,根据业务需求选择合适的缓存更新策略:
- 主动更新:在数据源发生变化时同步更新缓存。一致性高,维护成本较高
- 被动删除:设置过期时间。一致性较低,维护成本低
- 缓存雪崩问题,缓存由于某些原因不能提供服务,
- 保证缓存服务高可用
- 服务限流并降级
- 提前演练缓存挂掉后出现的问题
- 热点数据问题,当一个热点数据并发量非常大,缓存失效瞬间,大量线程重建缓存,造成数据源压力加大
- 互斥锁:只允许一个线程重建缓存,其他线程等待执行完再从缓存获取。如果出现问题,可能会导致死锁
- 永不过期,定期构建缓存;在特殊情况下数据源发生变化,会导致数据不一致