[转帖]三种缓存策略分析:Cache aside,Read/Write through,Write Back

三种,缓存,策略,分析,cache,aside,read,write,through,back · 浏览次数 : 0

小编点评

## Problem 1: Cache invalidation when update When request 1 queries the cache but finds it empty, it queries the database. However, when update data is written and deleted from the database, the old data remains in the cache. **Solution:** To prevent this, add an expiration time to the cache data. This ensures that the cache is only invalidated when the data is actually updated or deleted. ## Problem 2: Frequent cache deletion Frequent updates can cause the cache to be deleted more frequently, reducing its effectiveness. **Solution:** Use the Write Through strategy, which can minimize the frequency of cache deletion. Write Through allows data to be written through the cache before being synchronized to the database, preventing the cache from being deleted. ## Problem 3: Write Miss handling Write Miss occurs when a write operation is attempted but the data is not available in the cache. Two common solutions are: **1. Write Allocate (write-allocate):** - Write the data to the cache position. - Synchronize the updated cache data with the database. **2. No-write allocate (no-write-allocate):** - Update the database with the new data. - If no data is available in the cache, treat it as a Write Miss and update the database directly. ## Conclusion While all cache strategies have limitations, **Write Through** is generally preferred for scenarios with high read traffic and limited write operations. **Write Allocate** is suitable for situations with high write traffic but requires more complex implementation.

正文

Cache aside

在这里插入图片描述

旁路缓存,旁路缓存操作逻辑是查询缓存,如果不存在那么就读取数据库并更新到缓存当中.
在这里插入图片描述

如果是更新数据库,那么操作完数据库后,删除缓存.

注意旁路缓存,缓存中的内容是不做更新操作的,只有写入和删除操作.

问题

1.请求1查询不到缓存,查询数据库.请求2更新数据,删除缓存,请求1写入缓存.这时缓存当中的数据就是旧的数据.

解决方法:
给缓存的数据加一个过期的时间,尽可能减少过期缓存发生的概率.缓存的过期时间也不宜过短,过短导致缓存的作用减少.

2.更新频繁的场景下会导致缓存频繁的被删除,降低了缓存的作用

解决方法:
使用Write through,可以减少这种情况的发生.

适用场景

用于读操作较多.实现简单.

Read/Write through

核心策略:以缓存为操作为主,数据存先存在于缓存,缓存的数据是不会过期的.

在这里插入图片描述

Read Through:先查询缓存中数据是否存在,如果存在则直接返回,如果不存在,则由缓存组件负责从数据库中同步加载数据.

在这里插入图片描述

Write Through:先查询要写入的数据在缓存中是否已经存在,如果已经存在,则更新缓存中的数据,并且由缓存组件同步更新到数据库中,,果缓存中数据不存在,我们把这种情况叫做Write Miss(写失效),图中以Write allocate方式.

Write Miss解决方式:一个是“Write Allocate(按写分配)”,做法是写入缓存相应位置,再由缓存组件同步更新到数据库中,图中就是指的是这种方式;另一个是“No- write allocate(不按写分配)”,做法是不写入缓存中,而是直接更新到数据库中.

适用场景

用于读操作较多.相较于Cache aside而言更适合缓存一致的场景.
使用简单屏蔽了底层数据库的操作,只是操作缓存.
这种方式其实可以以Redis为存储,对数据的持久性要求较低的.

Write Back(Write behind)

Write back是相较于Write Through而言的一种异步回写策略.
异步写可以减少与物理磁盘存储的交互,也可以进行合并写等优化.

在这里插入图片描述

问题

实现比较复杂,可能会丢失数据.

适用场景

用于读少写多的场景,Linux系统的页缓存和MySQL InnoDB 引擎的Cache Pool其实就是使用的WriteBack策略.
相较于Write through 而言拥有更高的写入性能.

总结

不管是哪种缓存策略都无法保证数据库与缓存的一致性.因此业务层要对缓存的数据有一定的容忍,缓存中的数据可能是过期的或者是无效的数据.

文章知识点与官方知识档案匹配,可进一步学习相关知识
CS入门技能树Linux入门初识Linux24804 人正在系统学习中

与[转帖]三种缓存策略分析:Cache aside,Read/Write through,Write Back相似的内容:

[转帖]三种缓存策略分析:Cache aside,Read/Write through,Write Back

Cache aside 旁路缓存,旁路缓存操作逻辑是查询缓存,如果不存在那么就读取数据库并更新到缓存当中. 如果是更新数据库,那么操作完数据库后,删除缓存. 注意旁路缓存,缓存中的内容是不做更新操作的,只有写入和删除操作. 问题 1.请求1查询不到缓存,查询数据库.请求2更新数据,删除缓存,请求1写

[转帖]CPU缓存行

https://www.jianshu.com/p/e338b550850f CPU缓存 执行程序是靠运行CPU执行主存中代码,但是CPU和主存的速度差异是非常大的,为了降低这种差距,在架构中使用了CPU缓存,现在的计算机架构中普遍使用了缓存,分为一级缓存,二级缓存,还有一些具备三级缓存,我们可以看

[转帖]AMD第四代宵龙 9174F 亮眼

https://www.amd.com/zh-hans/processors/epyc-9004-series#%E8%A7%84%E6%A0%BC 型号规格 型号CPU 核心数量线程数量最大加速时钟频率全核心加速频率基准时钟频率三级缓存默认热设计功耗/TDP AMD EPYC™ 9654P 96

[转帖]IO多路复用的三种机制Select,Poll,Epoll

I/O多路复用(multiplexing)的本质是通过一种机制(系统内核缓冲I/O数据),让单个进程可以监视多个文件描述符,一旦某个描述符就绪(一般是读就绪或写就绪),能够通知程序进行相应的读写操作 select、poll 和 epoll 都是 Linux API 提供的 IO 复用方式。 相信大家

[转帖]Redis是的缓存特征及类型

文章目录 缓存特征缓存处理请求的两种情况缓存的类型只读缓存读写缓存 缓存特征 一个系统中的不同层之间的访问速度不一样,所以我们才需要缓存,这样就可以把一些需要频繁访问的数据放在缓存中,以加快它们的访问速度。 计算机系统中的三层存储结构,以及它们各自的常用容量和访问性能 计算机系统中,默认有两种缓存:

[转帖]K8S部署Redis Cluster集群(三主三从模式) - 部署笔记

https://www.cnblogs.com/cheyunhua/p/15619317.html 一、Redis 介绍 Redis代表REmote DIctionary Server是一种开源的内存中数据存储,通常用作数据库,缓存或消息代理。它可以存储和操作高级数据类型,例如列表,地图,集合和排序

[转帖]玄铁C910微架构学习(2)——指令高速缓存

https://www.zhihu.com/people/kent-35-40/posts ​ 目录 收起 一、指令提取单元简介 二、指令高速缓存源码的文件结构 三、指令高速缓存的组成 data_array tag_array predecd_array 四、指令高速缓存的回填 五、扩展的指令缓存操

[转帖]Linux内核网络协议知识补充

https://zhuanlan.zhihu.com/p/597798185 1. 什么是连接?什么情况下算建立了连接? 通过三次握手, 建立连接. 并且源和目的分配了相应资源(缓存等). 2. 什么是心跳? 建立了连接, 很长时间未发送数据包, 连接本身仍是有效的 但存在不可抗力(网线断了), 系

[转帖]Nginx优化与防盗链

目录 一、配置Nginx隐藏版本号1、第一种方法修改配置文件2、第二种方法修改源码文件,重新编译安装 二、修改Nginx用户与组三、配置Nginx网页缓存时间四、实现Nginx的日志分割五、配置Nginx实现连接超时六、更改Nginx运行进程数七、配置Nginx实现网页压缩功能八、配置Nginx防盗

[转帖]一张图搞定redis内存优化及配置

https://www.jianshu.com/p/3195663af83e Redis内存优化及配置.png Redis优化及配置 Redis所有的数据都在内存中,而内存又是非常宝贵的资源。常用的内存优化方案有如下几部分:一、配置优化二、缩减键值对象三、命令处理四、缓存淘汰方案 一、配置优化 Li