数据库缓存策略

news2024/9/24 15:21:38

数据库缓存策略

以下是数据库与缓存的五种常见策略。

1缓存旁路

  • 缓存旁路(Cache-Aside)
    • 在缓存旁路策略中,数据库缓存位于数据库旁边。
    • 当应用程序请求数据时,它会首先检查缓存
      • 如果缓存中存在数据(缓存命中),则会直接返回数据
      • 如果缓存中没有数据(缓存未命中),则应用程序将查询数据库,然后将数据存储在缓存中,并将其返回给应用程序,以供后续的查询使用。
    • 缓存旁路设计是一种优秀的通用缓存策略
      • 这种策略特别适用于读取密集的工作负载的应用程序
      • 它将经常读取的数据保持在附近,以满足众多的读取请求
    • 将缓存和数据库分开还带来了两个额外的好处
      • 在缓存出现故障的情况下,仍然可以从数据库中读取数据,从而增加了一定的弹性
      • 由于缓存与数据库分离,因此可以独立扩展缓存和数据库,从而提高了整个系统的可伸缩性
    • 注意
      • 缓存旁路策略主要缺点是数据库中的不一致性问题
        • 当应用程序更新数据库中的数据时,缓存中的数据将过时
        • 为了解决这个问题,我们可以使用缓存失效策略
      • 对于任何数据的写入操作,应用程序仍然会直接访问数据库

2读取穿透

  • 读取穿透(Read-Through)
    • 在读取穿透缓存的策略中,缓存位于应用程序和数据库之间
    • 在这种策略下,应用程序总是与缓存进行读取交互
      • 当缓存命中时,数据会立即返回
      • 当缓存未命中时,缓存会从数据库中获取缺失的数据,然后将其返回给应用程序
    • 对于任何数据的写入操作,应用程序仍然会直接访问数据库

3写入穿透

  • 写入穿透(Write-Through)
    • 写入穿透缓存策略不是直接将数据写入数据库,而是首先将数据写入缓存,然后缓存立即将数据写入数据库
  • 写入穿透策略的好处在于,确保缓存中具有所有写入的数据,并且任何新的读取请求不会因为缓存从主数据库请求数据而遇到延迟。如果仅采用这种安排,缺点是会产生额外的写入延迟,因为操作必须经过缓存然后再写入数据库。尽管这应该是立即发生的,但仍然存在两次连续写入的情况。
  • 真正的好处来自于将写入穿透与读取穿透缓存配对使用的策略。这种策略将采用读取穿透缓存策略的所有优点,并增加了消除数据不一致的潜在优势。通过使用这种组合策略,可以实现写入数据的高效缓存和读取数据的快速访问,同时保持数据的一致性。

4写入回写

  • 写入回写(Write-Back)
    • 与写入穿透策略几乎完全相同,只有一个关键细节不同。在写回策略中,应用程序再次直接将数据写入缓存。然而,缓存不会立即将数据写入数据库,而是会延迟一段时间后再进行写入。
    • 通过在写入数据库时延迟而不是立即进行,可以减轻写入密集工作负载对缓存的压力。这使得写回和读取穿透的组合对于混合工作负载非常适用。这种组合确保最近写入的数据和访问的数据始终存在,并可通过缓存进行访问
    • 缓存到数据库写入的延迟可以改善整体写入性能,并且如果支持批处理,则可以减少总体写入量。这为一些成本节约和整体工作负载减轻带来了潜在的机会。然而,在缓存发生故障的情况下,这种延迟可能会导致可能数据丢失的风险,特别是如果批处理或延迟写入数据库尚未发生。
    • 写回策略的另一个缺点是,如果缓存发生故障,那么缓存中的数据可能会丢失。这种情况下,数据库中的数据将是最新的,但是缓存中的数据将是过时的。这种情况下,应用程序将无法从缓存中读取数据,直到缓存恢复正常为止。

5写入旁路

  • 写入旁路(Write-Around)
    • 写入旁路缓存策略将与缓存旁路或读取穿透缓存策略相结合
    • 在这种情况下,数据总是被写入数据库,而读取的数据会被放入缓存
    • 如果发生缓存未命中,则应用程序会从数据库读取数据,然后更新缓存以备下次使用
  • 这种特定的策略在数据仅被写入一次且不进行更新的情况下表现最佳。数据很少被读取或根本不被读取。

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

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

相关文章

风速预测 | Python基于CEEMDAN-CNN-Transformer+ARIMA的风速时间序列预测

目录 效果一览基本介绍程序设计参考资料 效果一览 基本介绍 CEEMDAN-CNN-TransformerARIMA是一种用于风速时间序列预测的模型,结合了不同的技术和算法。收集风速时间序列数据,并确保数据的质量和完整性。这些数据通常包括风速的观测值和时间戳。CEEMDAN分…

SpringCloudAlibaba系列之Nacos实战

目录 注意事项 参考资源 Nacos配置中心 初始化项目 进行Nacos相关配置 运行 Nacos注册中心 dubbo方式 对外暴露接口dubbo-api 服务提供者dubbo-provider 服务消费者dubbo-consumer 负载均衡客户端方法 服务提供者 服务消费者 注意事项 不管是使用Nacos配置中心&…

使用POI生成word文档的table表格

文章目录 使用POI生成word文档的table表格1. 引入maven依赖2. 生成table的两种方式介绍2.1 生成一行一列的table2.2 生成固定行列的table2.3 table合并列2.4 创建多个table存在的问题 使用POI生成word文档的table表格 1. 引入maven依赖 <dependency><groupId>org.…

智能家居20年,从「动手」到「用脑」

【潮汐商业评论/原创】 正在装修新家的Carro最近陷入了纠结之中&#xff0c;“还没想好要怎么装一套完整的智能家居&#xff0c;家里的基装就已经开始了。” 事实上&#xff0c;Carro对智能家居也不了解&#xff0c;并不知道该如何下手&#xff0c;心想“要是能一次性设计好就…

鸿蒙常用UI效果及一些处理方式总结

前言&#xff1a; DevEco Studio版本&#xff1a;4.0.0.600 详细使用介绍 1、Text的一些常用设置 Text(this.message).fontSize(50)//字体大小.fontColor(Color.White)//字体颜色.fontWeight(FontWeight.Bold)//字体加粗.backgroundColor(Color.Black)//背景颜色.fontStyle(…

利用Python实现科学式占卜

一直以来,中式占卜都是基于算命先生手工实现,程序繁琐(往往需要沐浴、计算天时、静心等等流程)。准备工作复杂(通常需要铜钱等道具),计算方法复杂,需要纯手工计算二进制并转换为最终的卦象,为了解决这个问题,笔者基于python实现了一套科学算命工具,用于快速进行占卜…

IDEA导出jar

1、选择导出方式 2、选择Main Class 3、构建jar

数据结构与算法教程,数据结构C语言版教程!(第五部分、数组和广义表详解)七

第五部分、数组和广义表详解 数组和广义表&#xff0c;都用于存储逻辑关系为“一对一”的数据。 数组存储结构&#xff0c;99% 的编程语言都包含的存储结构&#xff0c;用于存储不可再分的单一数据&#xff1b;而广义表不同&#xff0c;它还可以存储子广义表。 本章重点从矩阵…

java复习篇 数据结构:链表第二节 哨兵

目录 单向链表哨兵 初始 头插 思路 代码 尾插 思路 遍历 遍历验证头插 尾插代码 尾插测试 get 思路 代码 测试 insert 思路 代码 测试 remove 移除头结点 提问 移除指定位置 测试 单向链表哨兵 单向链表里面有一个特殊的节点称为哨兵节点&#xff0c;…

[pytorch入门] 2. tensorboard

tensorboard简介 TensorBoard 是一组用于数据可视化的工具。它包含在流行的开源机器学习库 Tensorflow 中.但是也可以独立安装&#xff0c;服务Pytorch等其他的框架 可以常常用来观察训练过程中每一阶段如何输出的 安装pip install tensorboard启动tensorboard --logdir<d…

redis-发布缓存

一.redis的发布订阅 什么 是发布和订阅 Redis 发布订阅 (pub/sub) 是一种消息通信模式&#xff1a;发送者 (pub) 发送消息&#xff0c;订阅者 (sub) 接收消息。 Redis 客户端可以订阅任意数量的频道。 Redis的发布和订阅 客户端订阅频道发布的消息 频道发布消息 订阅者就可…

MATLAB知识点:mode :计算众数

​讲解视频&#xff1a;可以在bilibili搜索《MATLAB教程新手入门篇——数学建模清风主讲》。​ MATLAB教程新手入门篇&#xff08;数学建模清风主讲&#xff0c;适合零基础同学观看&#xff09;_哔哩哔哩_bilibili 节选自第3章 3.4.1节 mode &#xff1a;计算众数 众数是指一…

量子网络是什么

量子网络是基于量子力学规律对量子信息进行存储、处理和传输的物理装置&#xff0c;是实现量子通讯和大规模量子计算的基础。清华大学研究团队利用同种离子的双类型量子比特编码&#xff0c;在国际上首次实现无串扰的量子网络节点&#xff0c;对未来实现量子通讯和大规模量子计…

使用Linux SDK客户端向AWS Iot发送数据

参考链接&#xff1a; https://ap-southeast-1.console.aws.amazon.com/iot/home?regionap-southeast-1#/test 此篇文章用于测试&#xff0c;使用Linux SDK客户端向AWS Iot发送数据&#xff0c;准备环境如下&#xff1a; 1、客户端环境准备 1.1 客户端操作系统 虚拟机一台…

Docker中安装 RabbitMQ

1、下载 RabbitMQ 镜像 下载最新版本的镜像&#xff1a; docker pull rabbitmq更多版本的镜像可以访问 Docker 官网&#xff1a;https://hub.docker.com/_/rabbitmq?tabtags 2、创建并运行 RabbitMQ 容器 启动命令&#xff1a; docker run -d -p 15672:15672 -p 5672:567…

音视频基础——音视频录制及播放

音视频录制 Darren老师 当涉及音视频录制时&#xff0c;通常需要从源&#xff08;例如麦克风或摄像头&#xff09;采集音视频数据&#xff0c;并对其进行处理和编码&#xff0c;最后进行封装&#xff0c;以生成最终的音视频文件或流。以下是一般的音视频录制原理的详细步骤&am…

PHP中一些特征函数导致的漏洞总结

第一部分&#xff1a; 特征函数 接触到几个常用的函数&#xff1a; \\ \\\ md5 intval strpos in_array preg_match str_replacephp用这些函数实现过滤一些代码&#xff0c;漏洞可能有一些特性&#xff0c;利用这些特征代码进行对比&#xff1b;账号密码对比&#xff1b;强制检…

leetcode刷题(剑指offer) 105.从前序与中序遍历序列构造二叉树

105.从前序与中序遍历序列构造二叉树 给定两个整数数组 preorder 和 inorder &#xff0c;其中 preorder 是二叉树的先序遍历&#xff0c; inorder 是同一棵树的中序遍历&#xff0c;请构造二叉树并返回其根节点。 示例 1: 输入: preorder [3,9,20,15,7], inorder [9,3,15,…

【江科大】STM32:USART串口(理论部分)上

串口 全双工&#xff1a;可以进行同步通信 单端信号&#xff1a;信号线传输的就是单端信号。&#xff08;也就是与地线&#xff08;GND&#xff09;的电势差&#xff09; 缺点&#xff1a;防干扰能力差 原因&#xff1a;当信号从A点传输到B点&#xff0c;理想条件是A&#xff0…

java steam 的使用

说steam 前看下kotlin的一个写法如果用java怎么写 fun main() {// 创建一个列表val fruits listOf("Apple", "Banana", "Cherry", "Date", "Elderberry")// 使用 Sequence 进行过滤和映射操作val uppercaseFruitLengths …