$ 缓存的使用模式

1、预留缓存(Cache-Aside) 应用程序在访问数据库之前必须要先访问缓存,如果缓存中包含了该数据则直接返回,不用再经过数据库,否则应用程序必须要从先数据库中取回数据,存储在缓存中并且将数据返回,当有数据要写入的时候,缓存内容必须要和数据库内容保持一致。

示例如下代码分别对应读和写:

v = cache.get(k)
if(v == null) {
    v = sor.get(k)
    cache.put(k, v)
}

v = newV
sor.put(k, v)
cache.put(k, v)

这种方式是将数据库与缓存通过客户端应用程序主动管理来进行同步,这不是很好的使用方式。

2、Read-Through模式 相比上面的由客户端应用程序来管理数据库和缓存同步的方式,这种模式缓存会配有一个缓存中间件,该中间件来负责数据库数据和缓存之间的同步问题。当我们应用要获取缓存数据时,这个缓存中间件要确认缓存中是否有该数据,如果没有,从数据库加载,然后放入缓存,下次以后再访问就可以直接从缓存中获得。

3、Write-Through模式 这种模式就是缓存能够感知数据的变化。 也就是说在更新数据库的同时也要更新缓存,该模式其实也是弱一致性,当数据库更新数据失败的时候,缓存不能继续更新数据,要保持数据库和缓存的最终一致性。

4、Write-behind模式 该模式是以缓存为优先,将缓存更新的数据存放队列中,然后数据库定时批量从队列中取出数据更新数据库。

链接:https://www.jianshu.com/p/5a0669d6305e

缓存更新的套路 (opens new window)

更新时间: 5/15/2019, 1:54:17 PM