缓存的读写模式

1. Cache Aside Pattern(常用)

Cache Aside Pattern(旁路缓存),是最经典的 缓存 + 数据库 读写模式。
读的时候,先读缓存,缓存没有的话,就读数据库,然后取出数据后放入缓存,同时返回响应。

更新的时候,先更新数据库,然后再删除缓存。

为什么是删除缓存,而不是更新缓存呢?

  • 缓存的值是一个结构:hashlist,更新数据需要遍历,先遍历(耗时)后修改
  • 懒加载,使用的时候才更新缓存,使用的时候才从 DB 中加载
  • 也可以采用异步的方式填充缓存,开启一个线程定时将 DB 的数据刷到缓存中

1.1 高并发脏读的三种情况

  1. 先更新数据库,再更新缓存
    updatecommit 之间,更新缓存,commit 失败,则 DB 与缓存数据不一致

  2. 先删除缓存,再更新数据库
    updatecommit 之间,有新的读,缓存空,读 DB 数据到缓存数据是旧的数据,commitDB 为新数据,则 DB 与缓存数据不一致

  3. 先更新数据库,再删除缓存(推荐)
    updatecommit 之间,有新的读,缓存空,读 DB 数据到缓存数据是旧的数据,commitDB 为新数据,则 DB 与缓存数据不一致。可以采用延时双删策略

2. Read/Write Through Pattern

应用程序只操作缓存,缓存操作数据库。

Read-Through(穿透读模式/直读模式):应用程序读缓存,缓存没有,由缓存回源到数据库,并写入缓存。(guavacache

Write-Through(穿透写模式/直写模式):应用程序写缓存,缓存写数据库。
该种模式需要提供数据库的 handler,开发较为复杂。

3. Write Behind Caching Pattern

应用程序只更新缓存。

缓存通过异步的方式将数据批量或合并后更新到 DB

不能时时同步,甚至会丢数据

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小松の博客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值