应用多级缓存模式支撑海量读服务

2016/3/27 posted in  others

如何缓存数据

过期与不过期

不过期缓存的场景一般思路如下:

首先写数据库,如果成功则写缓存。这种机制存在一些问题:

  • 事务在提交时失败则写缓存是不会回滚的,造成DB和缓存数据不一致
  • 多个人并发写缓存可能出现脏数据
  • 同步写对性能有一定影响,异步写又存在丢数据的风险

如果对缓存数据一致性要求不是那么高,数据量也不是很大,可以考虑定期全量同步缓存。

  1. 把写缓存改成写消息,通过消息通知数据变更
  2. 同步缓存系统会订阅消息,并根据消息进行更新缓存
  3. 数据一致性可以采用:消息体只包括ID,然后查库获取最新版本数据;通过时间戳和内容摘要机制(MD5)进行缓存更新
  4. 如上方法也不能保证消息不丢失,可以采用:应用在本地记录更新日志,当消息丢失了,回放更新日志

过期缓存机制的常见步骤是:首先读取缓存,如果不命中,则查询数据,然后异步写入缓存并设置过期时间,下次读取将命中缓存。

Reference

http://jinnianshilongnian.iteye.com/blog/2283670