缓存策略以及如何选择正确的策略

news2025/6/21 2:54:50

正确地使用缓存可以减少系统响应的时间,降低数据库负载,反之可能带来相反的效果。因此,就必须了解有哪些缓存策略,以及如何根据实际使用场景选择合适的缓存策略。

缓存策略取决于数据和数据访问模式,即,数据是如何写入和读取的。本文将讲述两种读策略(Cache-Aside、Read-Through)和 三种写策略(Write-Through 、Write-Around、Write-Back/Write-Behind)

目录

  • Cache-Aside
    • 基本原理
    • 运行方式
    • 适用场景及优缺点:
  • Read-Through
    • 基本原理
    • 运行方式:
    • 适用场景及优缺点
  • Write-Through
    • 基本原理
    • 运行方式
    • 适用场景及优缺点
  • Write-Around
    • 基本原理
    • 运行方式
    • 适用场景及优缺点
  • Write-Back or Write-Behind
    • 基本原理
    • 运行方式:
    • 适用场景及优缺点
  • 总结

Cache-Aside

基本原理

应用程序同时和缓存、数据库通信,缓存和主数据库之间没有连接,缓存和数据库的所有操作均由应用程序处理。
在这里插入图片描述

运行方式

  1. 应用程序首先检查缓存。
  2. 如果在缓存中找到数据,则命中缓存,可以直接读取数据并返回给客户端。
  3. 如果缓存中找不到数据,明缓存未命中。此时应用程序必须做额外的工作:先查询数据库以读取数据,然后将其返回给客户端,并将数据存储在缓存中,以便后续请求直接命中缓存。

适用场景及优缺点:

适合读取密集型任务,读多写少

优点:可以应对缓存故障问题,缓存故障时依然可以直接访问数据库保证服务;缓存的数据模型可以和数据库数据模型不同。

缺点:当数据更新时,缓存和数据库可能不一致。解决方法有:1、设置缓存数据的TTL,在TTL到达之前,先提供旧数据; 2、可以删除缓存,下一次查询时查数据库然后更新缓存数据; 3、可以在更新数据库时,同时更新缓存。

Read-Through

基本原理

此策略将缓存串联在服务与数据库之间。服务不与数据库直接通信,而是经过缓存获取数据库的数据。

一般这种缓存是靠数据库本身实现的,例如,mysql的缓存功能、DynamoDB Accelerator (DAX)是直读/直写缓存

在这里插入图片描述

运行方式:

  1. 应用程序请求缓存
  2. 如果命中缓存,则直接返回结果
  3. 如果未命中缓存,则需要缓存负责读取数据库,然后填充缓存,并返回给应用程序

适用场景及优缺点

适合读多写少的场景。

优点:暂时看不出来有什么优点。。。。编不出来

缺点:与cache-aside类似,第一次查询总会查不到;也同样存在缓存与数据库不一致问题;存在单点故障,当缓存不可用时,会导致整个服务不可用。

Write-Through

基本原理

数据先写入缓存,然后写入数据库。缓存与数据库串联,写入操作始终通过缓存到达数据库。

在这里插入图片描述

运行方式

  1. 应用程序直接写入缓存
  2. 缓存负责更新数据库。

适用场景及优缺点

优点:能始终保持缓存和数据库的一致性。当与read though组合时,可以避免缓存失效问题。

缺点:写入的时候需要写两次,会有一定延时

Write-Around

基本原理

应用程序与数据库直接通信,也与缓存直接通信。

在这里插入图片描述

运行方式

应用程序直接将数据写入数据库,只有当读取时,才顺带更新缓存。

适用场景及优缺点

优点:Write-around 与 read-through 结合起来,在数据只写入一次而读取频率较低或从不读取的情况下提供良好的性能。例如,实时日志或聊天室消息。同样,该模式也可以与cache-aside结合使用。

缺点:可能存在数据库和缓存不一致的情况。

Write-Back or Write-Behind

基本原理

应用程序与缓存直接通信,缓存和数据库通信。

在这里插入图片描述

运行方式:

应用程序将数据写入缓存,缓存存储数据并立即向应用程序确认。然后,缓存将数据写回数据库。即先写缓存,然后异步同步数据库。

适用场景及优缺点

适用场景:适合写入密集型的业务

优点:高性能;与read-though 结合使用,可以保证最近更新和最近访问的数据 一直可用。 可以容忍数据库故障

缺点:如果缓存故障,可能数据永久丢失。

总结

在实际使用中,应当结合实际业务场景,选择合适缓存读、写策略或组合。

参考资料:

https://codeahoy.com/2017/08/11/caching-strategies-and-how-to-choose-the-right-one/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1584945.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

DSP笔记10-CPU定时器

28335有三个CPU定时器 高位寄存器H CPU定时器工作原理 周期寄存器PRDH:PRD 计数器寄存器TIMH:TIM 周期寄存器PRDH:PRD赋值后装在到计数器寄存器TIMH:TIM,TIMCLK(脉冲)减1,直至为0。 TIMCLK(脉冲)通过定…

yolov8多分支任务头训练

目前已知的yolov8可以针对多个任务进行单独训练,但是暂时还没有开放针对多个任务头同时进行训练的教程,本文章针对yolov8的多任务训练进行详细介绍。 先放上效果图: 三个任务,分别是目标检测、可行驶区域、车道线,具体步骤请往下看。 一、环境配置 从如下github下载代码…

idm线程越多越好吗 idm线程数多少合适 IDM百度云下载 IDM下载器如何修改线程数

IDM(Internet Download Manager)是一款流行的网络下载器,它支持多线程下载,这意味着它可以同时建立多个连接来下载文件的不同部分,从而提高下载速度。我们在使用IDM的时候总是有很多疑问,今天我们学习IDM线…

【科学计量】剔除来自unknown的机构与作者文献文献——数据清洗

剔除来自unknown的机构与作者文献文献——数据清洗 背景实例解决方法方法一: 使用专门处理bibx文件的库方法二: 直接处理纯文本数据背景 有时在研究过程中,会遇到不同类型的文献,但是有些文献中的数据会有部分缺失,常见的比如机构,作者和年份等字段,因此为了使用科研工…

esxi配置使用以及虚拟机管理

vSphere Client安装和esxi主机 esxi配置 许可证 虚拟机管理 vSphere Client中创建、删除等虚拟机的管理。 vSphere Client中创建虚拟机并安装操作系统; 步骤1 创建虚拟机 密码:Tongxin2023 (1) 厚置备延迟置零 以默认的厚格式创建虚拟磁盘。创建过…

机器学习实现文本分类

传统的向量空间模型(VSM)假设特征项之间相互独立,这与实际情况是不相符的,为了解决这个问题,可以采用文本的分布式表示方式(例如 word embedding形式),通过文本的分布式表示,把文本表示成类似图…

使用API有效率地管理Dynadot域名,重新提交域名转移密码

关于Dynadot Dynadot是通过ICANN认证的域名注册商,自2002年成立以来,服务于全球108个国家和地区的客户,为数以万计的客户提供简洁,优惠,安全的域名注册以及管理服务。 Dynadot平台操作教程索引(包括域名邮…

通用外设-红外遥控器(NEC协议)

目录 前言 一、前期的准备 1. 结构体 2. 中断 1.定时中断 2.外部中断(下降沿中断) 二、功能实现 1.时序说明 2.逻辑实现 3.代码实现 总结 前言 简单介绍红外遥控器的使用,可以正常使用,但是部分功能未启用,…

风险评估在应对网络安全威胁中扮演着重要的角色

如今,IT 安全专家面临各种重大威胁,从勒索软件、网络钓鱼,到对基础设施的攻击,再到对知识产权、客户数据的窃取;从不安全的供应链合作伙伴,再到组织内部人员的恶意行为。同时,随着云计算、远程工…

关于ASP.NET Core WebSocket实现集群的思考

前言 提到WebSocket相信大家都听说过,它的初衷是为了解决客户端浏览器与服务端进行双向通信,是在单个TCP连接上进行全双工通讯的协议。在没有WebSocket之前只能通过浏览器到服务端的请求应答模式比如轮询,来实现服务端的变更响应到客户端&…

【鹅厂摸鱼日记(二)】(生活篇)初到深圳的人情冷暖

💓博主CSDN主页:杭电码农-NEO💓   ⏩专栏分类:重生之我在鹅厂摸鱼⏪   🚚代码仓库:NEO的学习日记🚚   🌹关注我🫵带你学习更多知识   🔝🔝 摸鱼日记 1. 前言2. 鹅厂的人文关怀…

FFmpeg: 简易ijkplayer播放器实现--03UI界面设计

文章目录 UI设计流程图UI设计界面点击播放功能实现 UI设计流程图 UI设计界面 主界面 控制条 播放列表 画面显示 标题栏 设置界面 提示框 点击播放功能实现 槽函数实现: connect(ui->ctrlBarWind, &CtrlBar::SigPlayOrPause, this, &Main…

09 Php学习:数组和排序

数组概念 在PHP中,数组是一种复合数据类型,用于存储多个值。以下是关于PHP数组的详细解释: 索引数组:索引数组是最基本的数组类型,其中每个元素都有一个唯一的数字索引,从0开始递增。 关联数组&#xff…

1、Qt UI控件 -- qucsdk

前言:Qt编写的自定义控件插件的sdk集合,包括了各个操作系统的动态库文件以及控件的头文件和sdk使用demo。类似于Wpf中的LivChart2控件库,都是一些编译好的控件,可以直接集成到项目中。该控件是飞扬青云大神多年前开发的&#xff0…

算法刷题应用知识补充--搜索与图

这里写目录标题 DFS题结 BFS题结 一级目录二级目录二级目录二级目录 一级目录二级目录二级目录二级目录 一级目录二级目录二级目录二级目录 DFS 题 知识点1:本题在dfs的for循环搜索中,进行了剪枝,即写一个判断函数,把不符合题意的…

PHP Storm 2024.1使用

本文讲的是phpstorm 2024.1最新版本激活使用教程,本教程适用于windows操作系统。 1.先去idea官网下载phpstorm包,我这里以2023.2最新版本为例 官网地址:https://www.jetbrains.com/zh-cn/phpstorm/ 2.下载下来后安装,点下一步 …

【数据结构与算法】搜索算法(深度优先搜索 DFS和广度优先搜索 BFS)以及典型算法例题

目录 搜索算法(深度优先搜索DFS和广度优先搜索BFS)以及典型算法例题深度优先搜索 (Depth First Search 简称 DFS)DFS 的设计步骤深度优先搜索(DFS)算法例题例题一:N皇后问题例题二:路…

李廉洋;4.11黄金原油盘面走势分析及策略。

在周三公布的美国核心消费者价格指数高于预期后,渣打的策略师现在预计美联储今年只会降息两次,而不是四次。渣打全球G-10外汇研究主管Steve Englander周三在报告中写道,该行预测美联储在2024年将降息两次、每次25个基点,预计降息可…

网页文件批量下载工具有哪些 网页文件批量下载工具推荐 IDM免费激活 网络下载加速器

把任务丢给软件,把时间还给自己,批量下载功能让下载变得更高效。它可以有效减少重复性操作,只需要一次简单的设置,就能把大量文件下载到电脑。有关网页文件批量下载工具有哪些,网页文件批量下载工具推荐的问题&#xf…

2024认证杯数学建模C题思路模型代码

目录 2024认证杯数学建模C题思路模型代码:4.11开赛后第一时间更新,获取见文末名片 以下为2023年认证杯C题: 2024年认证杯数学建模C题思路模型代码见此 2024认证杯数学建模C题思路模型代码:4.11开赛后第一时间更新,获…