最近在读Facebook关于缓存的一个论文,发现有好多很好的创意,记录下来。
1,缓存一致性问题:
Facebook采用Cache Aside Pattern ,如果数据有变更,先更新数据库,在过期缓存,这种是比较常用的方案,并没有保证数据库和缓存的强一致,个人认为是合理的。只要保证强一致,必然会牺牲掉性能,这是无法避免的,网上的各种匪夷所思方案说实在的有点舍本逐末了。耗子叔 也在一篇文章中论述了关于缓存一致性的几种方案:
1,Cache Aside Pattern:先写数据库,在过期缓存
2,Read Through:如果发送读 miss ,由缓存数据库 去读持久化存储 并缓存在自己本地
Write Througn:如果发生write 操作,直接写缓存数据库,由缓存数据库同步更新持久化存储,注意是同步,和下面 write behind 不一样的地方是这里是同步
3,Write Behind :直接写缓存,由缓存数据库 异步更新 持久化存储,和Linux的pagecache策略很像