常见的缓存更新策略

ops/2025/2/21 7:49:08/

Cache Aside Pattern(旁路缓存模式)

Cache Aside Pattern 是我们平时使用比较多的一个缓存读写模式,比较适合读请求比较多的场景。

读写步骤

写:

  1. 更新DB
  2. 删除缓存

读:

  1. 缓存读数据,读到直接返回
  2. 未读取到直接从db读取
  3. db读取的数据同步到缓存

为什么删除 cache,而不是更新 cache?

获取缓存中的数据需要浪费资源去修改,频繁修改就会大量浪费

在写数据的过程中,可以先删除 cache ,后更新 db 么?

不行

请求 1 先把 cache 中的 A 数据删除;

2 请求 2 从 db 中读取数据;

3 请求 1 再把 db 中的 A 数据更新。 这就会导致请求 2 读取到的是旧值。

但是可以使用延时双删来实现这个缺点

在写数据的过程中,先更新 db,后删除 cache 就没有问题了么?

同步数据到缓存时,同步失败就会出现数据不一致,使用重试机制解决

缺点

1.首次请求数据肯定不在缓存

解决办法:采用预热方式

2.写操作频繁,会降低命中率

Read/Write Through Pattern(读写穿透)

读写步骤

写(Write Through):

● 先查 cache,cache 中不存在,直接更新 db。

● cache 中存在,则先更新 cache,然后 cache 服务自己更新 db(同步更新 cache 和 db)

读(Read Through):

● 从 cache 中读取数据,读取到就直接返回 。

● 读取不到的话,先从 db 加载,写入到 cache 后返回响应。

Write Behind Pattern(异步缓存写入)

Write Behind Pattern 和 Read/Write Through Pattern 很相似,两者都是由 cache 服务来负责 cache 和 db 的读写。 但是,两个又有很大的不同:Read/Write Through 是同步更新 cache 和 db,而 Write Behind 则是只更新缓存,不直接更新 db,而是改为异步批量的方式来更新 db。


http://www.ppmy.cn/ops/159718.html

相关文章

深入理解 fnmatch 函数的实现

0、背景 fnmatch 函数是 C 标准库和 POSIX 中用于匹配文件路径的工具,它使得我们能够根据模式字符串对文件名进行模式匹配。常见的用途包括在文件系统中查找符合某种模式(如通配符)的文件。例如,fnmatch(“.txt", “file1.t…

DeepSeek VS OpenAI:AI巨头应用对比

DeepSeek 和 OpenAI 都是领先的 AI 公司,具备各自的优势。这两天我读了一篇很棒的文章,作者Da-vinci对这两家AI巨头做了很直观的介绍比较。以下是来自原创的部分内容: DeepSeek、ChatGPT 比较表 DeepSeek、ChatGPT 比较表 | 来源于Da-vinci …

高速硬件电路设计

高速PCB 设计三大原则 3W原则 **1.定义:**线和线之间的距离保持3倍线宽。 2.作用:减少线间的串扰,可以保证70%的线间电场不互相干扰 3.总结:高速信号3W规则走,低速信号最低2W 20H 原则 1.图1,电源层和地…

Unity 打开摄像头 并显示在UI

需求: 打开相机并显示在UI上 效果: 注意: 电脑可能有多个摄像头,注意名称 代码: using System; using System.Linq; using UnityEngine; using UnityEngine.UI; using System.Collections.Generic; #if UNITY_EDITOR using UnityEditor; #endifname…

【Scrapy】Scrapy教程5——第一个Scrapy项目

文章目录 Scrapy目录结构第一个爬虫运行爬虫必要说明start_requests()和start_urls如何关闭allowed_domains的限制通过前几节的学习,我们已经了解了Scrapy的基本操作,下面我们开始第一个项目,我以本人的 网址为例进行爬虫讲解,之所以用我自己的网站,是因为我这个网站本来…

idea日常报错之UTF-8不可映射的字符

目录 一、UTF-8不可映射的字符的解决 1、出现这种报错的情形 2、具体解决办法 前言: 在我们日常代码编写的时候可能会遇到各式各样的错误,有时候并不是你改动了代码,而是莫名其妙就出现的报错,今天我就遇到一个在maven编译的时候…

HarmonyOS的核心特性:分布式技术引领创新

在数字化浪潮汹涌的今天,物联网(IoT)技术的飞速发展正逐步打破设备间的界限,使万物互联成为可能。HarmonyOS,作为华为自主研发的分布式全场景操作系统,凭借其核心的分布式技术,不仅引领了操作系…

平面与平面相交算法杂谈

1.前言 空间平面方程: 空间两平面如果不平行,那么一定相交于一条空间直线, 空间平面求交有多种方法,本文进行相关讨论。 2.讨论 可以联立方程组求解,共有3个变量,2个方程,而所求直线有1个变量…