如何缓存数据
过期与不过期
不过期缓存的场景一般思路如下:
首先写数据库,如果成功则写缓存。这种机制存在一些问题:
- 事务在提交时失败则写缓存是不会回滚的,造成DB和缓存数据不一致
- 多个人并发写缓存可能出现脏数据
- 同步写对性能有一定影响,异步写又存在丢数据的风险
如果对缓存数据一致性要求不是那么高,数据量也不是很大,可以考虑定期全量同步缓存。
- 把写缓存改成写消息,通过消息通知数据变更
- 同步缓存系统会订阅消息,并根据消息进行更新缓存
- 数据一致性可以采用:消息体只包括ID,然后查库获取最新版本数据;通过时间戳和内容摘要机制(MD5)进行缓存更新
- 如上方法也不能保证消息不丢失,可以采用:应用在本地记录更新日志,当消息丢失了,回放更新日志
过期缓存机制的常见步骤是:首先读取缓存,如果不命中,则查询数据,然后异步写入缓存并设置过期时间,下次读取将命中缓存。