高并发系统学习 Day16 缓存读写策略

73 阅读2分钟
在选择策略时也需要考虑诸多的因素,比如说,缓存中是否有可能被写入脏数据,策略的读写性能如何,是否存在缓存命中率下降的情况等等。接下来,我就以标准的“缓存 + 数据库”的场景为例,带你剖析经典的缓存读写策略以及它们适用的场景。这样一来,你就可以在日常的工作中根据不同的场景选择不同的读写策略。

Cache Aside(旁路缓存)策略:

image.png

其中读策略的步骤是:
    1)从缓存中读取数据;
    2)如果缓存命中,则直接返回数据;
    3)如果缓存不命中,则从数据库中查询数据;
    4)查询到数据后,将数据写入到缓存中,并且返回给用户
写策略的步骤是:
    1)更新数据库中的记录
    2)删除缓存记录

如果你的业务对缓存命中率有严格的要求,那么可以考虑两种解决方案:
    1. 一种做法是在更新数据时也更新缓存,只是在更新缓存前先加一个分布式锁,因为这样在同一时间只允许一个线程更新缓存,就不会产生并发问题了。当然这么做对于写入的性能会有一些影响;
    2. 另一种做法同样也是在更新数据时更新缓存,只是给缓存加一个较短的过期时间,这样即使出现缓存不一致的情况,缓存的数据也会很快过期,对业务的影响也是可以接受。

Read/Write Through(读穿 / 写穿)策略:

image.png

Write Back(写回)策略:

image.png

此文章为5月Day16学习笔记,内容来源于极客时间《高并发系统设计 40 问》