缓存更新的Design Pattern

更新缓存的Design Pattern有四种:Cache aside,Read through,Write through,Write behind caching

Cache Aside Pattern
这是最常用最常用的pattern了,其具体逻辑如下:

失效:应用程序先从cache取数据,没有得到,则从数据库中取数据,成功后,放到缓存中
命中:应用程序从cache中取数据,取到后返回
更新:先把数据存到数据库中,成功后,再让缓存失效
Read/Write Through Pattern
在上面的Cache Aside套路中,我们的应用代码需要维护两个数据存储,一个是缓存,一个是数据库。所以,应用程序比较啰嗦。而Read/Write Through套路是把更新数据库的操作由缓存自己代理了,所以,对于应用层来说,就简单得多了。可以理解为,应用认为后端就是在一个单一的存储,而存储自己维护自己的cache

Read Through
Read Through套路就是在查询操作中更新缓存,也就是说,当缓存失效的时候(过期或LRU换出),Cache Aside是由调用方负责把数据加载入缓存,而Read Through则用缓存服务自己来加载,从而对应用方是透明的。

Write Through
Write Throygh套路和Read Through相仿,不过是在更新数据时发生,当有数据更新的时候,如果没有命中缓存,直接更新数据库,然后返回。如果命中了缓存,则更新缓存,然后再由Cache自己更新数据库(这是一个同步操作 )

Write Behind Caching Pattern
Write Behind又叫Write Back。一些了解Linux操作系统内核的同学对write back应该非常熟悉,这不就是linux文件系统的Page Cache的算法吗?Write Back套路,一句话就是,在更新数据的时候,只更新缓存,不更新数据库,而我们的缓存会异步地批量更新缓存库。这个设计的好处就是让数据的IO操作飞快无比(因为直接操作内存吗),因为异步,write backg还可以额合并对同一个数据的多次操作,所以性能的提高是相当可观的。

转载:http://coolshell.cn/articles/17416.html

已有 7 条评论
  1. FranKap

    Propecia Tariffe Canadian Cialas Without Liquid Clomid For Sale Vitamins Interfere With Amoxicillin

    FranKap 回复
  2. Austot

    Comprar Cialis Foro Barato Buy Tadalista tadalafil cialis from india New Canadian Meds Fedex Shipping Dutasteride Find Visa Cialis En Ligne Pas Cher

    Austot 回复
  3. Kelemetry

    Kamagra Anwendung viagra Propecia Medicamentos Alli In Stock Uk Elocon With Free Shipping

    Kelemetry 回复
  4. Austot

    Overseas Pharmacy generic 5mg cialis best price Cephalexin 500 Mg

    Austot 回复
  5. FranKap

    Levitra Sans Ordonnance Pharmacie Propecia 40 Mg Online Propecia Bastelanleitung viagra marcas Cialis Discount Paris No Script Viagra 50 Mg

    FranKap 回复
  6. Austot

    Viagra 50 Mg Pfizer Propecia Sell Propecia Side Effects Temporary cheapest cialis Does Nolvadex Cause Hair Loss

    Austot 回复
  7. FranKap

    Can I Buy Cipro Online Free Overnight Viagra Shipping Brand Viagra Best Price Cheap Levitra

    FranKap 回复
发表新评论