10、redis与数据库双写一致性问题

191 阅读1分钟

redis与数据库双写一致性的问题,即缓存与数据库在双写时如何保证一致?

一致性

  • 强一致性:要求系统写入什么,读出来也会是什么,用户体验好,但是对系统性能要求高
  • 弱一致性:在系统写入成功后,不承诺可以立即读取到写入的值,多久数据达到一致也不确定。
  • 最终一致性:在系统写入成功后,保证在一定时间内,能够达到数据一致状态。

经典缓存模式

1、Cache-Aside Pattern(旁路缓存模式)

  • cache-asid 读流程 Snipaste_2022-02-25_15-51-44.png
  • cache-asid 写流程

Snipaste_2022-02-25_15-54-23.png

2、read-through/write-through(读写穿透)

  • read-through

Snipaste_2022-02-25_15-59-19.png

看似read-through与cache-asid读流程一样,其实内部有些区别,在读缓存的上一层read-through封装了一层cache provider,用来统一调用缓存和数据库;让代码更简洁,减少数据源上的负载

  • write-through 在写请求下,也是通过cache provider层统一更新数据库和缓存;

Snipaste_2022-02-25_16-10-04.png

3、write behind(异步缓存写入)

write behind跟read-through/write-through有相似的地方,都是由cache provider来负责缓存和数据库读写;不同的是read/write through 是同步更新缓存和数据库,而write behind只更新缓存,之后通过批量异步的方式更新数据库。

Snipaste_2022-02-25_16-18-18.png

该模式适合频繁写的场景,mysql的innodb buffer pool机制就是使用这种模式。