缓存:系统设计中至关重要的一环

2023-12-21 17:36

本文主要是介绍缓存:系统设计中至关重要的一环,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

什么是缓存?

缓存就像是一个超快速的存储区域,保存了计算机或手机经常使用的内容的副本,这样可以在不访问较慢的主存储器的情况下快速获取。

一个现实中的例子可以是,每当我们购买杂货时,通常会倾向于大量购买,这样可以让杂货多存放一段时间,避免频繁去市场购买,这其实就是将杂货缓存在我们附近,而不是每次都从市场购买。

在系统设计中,如果缓存得当,它可以显著提升系统的性能。

缓存策略取决于数据访问模式,即数据是如何读取或写入的。例如:

  • 系统是读取密集型还是写入密集型?
  • 系统是否需要高一致性?

等等……

因此,选择正确的写入缓存策略非常关键,下面是一些不同的缓存策略:

1. 缓存旁路(懒加载)

在这种设置中,应用程序缓存被分离出来,应用程序显式地与缓存和数据库一起工作。这是一种技术,应用程序代码负责管理缓存。当需要时,应用程序会将数据显式加载到缓存中,而缓存不会主动参与数据获取。

缓存旁路

该图示了其工作原理。

使用场景:

适用于读取密集型系统,Redis 或 Memcached 非常受欢迎,我曾经在缓存旁路设置中使用过 Redis 以及 Mongo-db,效果非常显著。

这种读取技术可以与诸如写入旁路缓存之类的数据写入技术相结合,我接下来会解释。

优点:

  • 灵活性:允许选择性缓存特定数据。
  • 控制:应用程序控制数据何时加载到缓存中。

缺点:

  • 提供过期数据:可能会提供过期数据,但如果我们实现了缓存的TTL(生存时间),则可以避免这种情况。

2. 写入旁路

跳过缓存,直接将数据写入数据库,并在读取用户请求的数据时更新缓存。

使用场景:

写入旁路可以与读取通过结合,对于数据写入一次,读取频率较低或几乎不读取的情况下提供良好的性能,例如实时日志或聊天室消息。同样,这种模式也可以与缓存旁路结合使用。

3. 读取穿透缓存

读取穿透缓存是一种策略,当发生缓存未命中时,缓存会自动从底层数据源检索数据并填充自身。这种技术与应用程序的数据访问层无缝集成,确保缓存与数据源保持同步。

读取穿透缓存

使用场景、优点和缺点:

读取穿透缓存适用于读取密集的工作负载,当同一数据被多次请求时。例如,一个新博客。缺点是,当首次请求数据时,总是会导致缓存未命中,并造成额外的数据加载开销。

4. 写入穿透缓存

写入穿透缓存是一种策略,其中写操作同时应用于缓存和底层数据源。这确保了缓存和数据源保持同步,但与写入后缓存相比可能会引入额外的延迟。它同步应用更新。

使用场景、优点和缺点:

当与读取穿透缓存结合时,写入穿透缓存可以保证每次读取和写入的数据一致性。但它会增加写操作的额外开销,因为每次写入都需要两次写入操作(缓存和数据库)。它以异步方式应用更新。

5. 写入后缓存

写入后缓存,也称为写回缓存,涉及在写操作发生时延迟对数据源的更新。系统不会立即更新底层存储,而是首先更新缓存,然后异步将更改传播到数据源。

使用场景、优点和缺点:

写回缓存提高了写入性能,非常适用于写入密集型任务。当与读取穿透结合时,适用于混合工作负载,确保最近的数据可用。

总结:

本文探讨了缓存技术,强调了根据数据访问模式选择正确策略的重要性。了解这些缓存策略对于在不同场景中优化系统性能至关重要。

这篇关于缓存:系统设计中至关重要的一环的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/520897

相关文章

电脑找不到mfc90u.dll文件怎么办? 系统报错mfc90u.dll丢失修复的5种方案

《电脑找不到mfc90u.dll文件怎么办?系统报错mfc90u.dll丢失修复的5种方案》在我们日常使用电脑的过程中,可能会遇到一些软件或系统错误,其中之一就是mfc90u.dll丢失,那么,mf... 在大部分情况下出现我们运行或安装软件,游戏出现提示丢失某些DLL文件或OCX文件的原因可能是原始安装包

电脑显示mfc100u.dll丢失怎么办?系统报错mfc90u.dll丢失5种修复方案

《电脑显示mfc100u.dll丢失怎么办?系统报错mfc90u.dll丢失5种修复方案》最近有不少兄弟反映,电脑突然弹出“mfc100u.dll已加载,但找不到入口点”的错误提示,导致一些程序无法正... 在计算机使用过程中,我们经常会遇到一些错误提示,其中最常见的就是“找不到指定的模块”或“缺少某个DL

利用Python快速搭建Markdown笔记发布系统

《利用Python快速搭建Markdown笔记发布系统》这篇文章主要为大家详细介绍了使用Python生态的成熟工具,在30分钟内搭建一个支持Markdown渲染、分类标签、全文搜索的私有化知识发布系统... 目录引言:为什么要自建知识博客一、技术选型:极简主义开发栈二、系统架构设计三、核心代码实现(分步解析

Python FastAPI+Celery+RabbitMQ实现分布式图片水印处理系统

《PythonFastAPI+Celery+RabbitMQ实现分布式图片水印处理系统》这篇文章主要为大家详细介绍了PythonFastAPI如何结合Celery以及RabbitMQ实现简单的分布式... 实现思路FastAPI 服务器Celery 任务队列RabbitMQ 作为消息代理定时任务处理完整

Linux系统中卸载与安装JDK的详细教程

《Linux系统中卸载与安装JDK的详细教程》本文详细介绍了如何在Linux系统中通过Xshell和Xftp工具连接与传输文件,然后进行JDK的安装与卸载,安装步骤包括连接Linux、传输JDK安装包... 目录1、卸载1.1 linux删除自带的JDK1.2 Linux上卸载自己安装的JDK2、安装2.1

Linux系统之主机网络配置方式

《Linux系统之主机网络配置方式》:本文主要介绍Linux系统之主机网络配置方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、查看主机的网络参数1、查看主机名2、查看IP地址3、查看网关4、查看DNS二、配置网卡1、修改网卡配置文件2、nmcli工具【通用

Linux系统之dns域名解析全过程

《Linux系统之dns域名解析全过程》:本文主要介绍Linux系统之dns域名解析全过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、dns域名解析介绍1、DNS核心概念1.1 区域 zone1.2 记录 record二、DNS服务的配置1、正向解析的配置

Linux修改pip和conda缓存路径的几种方法

《Linux修改pip和conda缓存路径的几种方法》在Python生态中,pip和conda是两种常见的软件包管理工具,它们在安装、更新和卸载软件包时都会使用缓存来提高效率,适当地修改它们的缓存路径... 目录一、pip 和 conda 的缓存机制1. pip 的缓存机制默认缓存路径2. conda 的缓

Redis解决缓存击穿问题的两种方法

《Redis解决缓存击穿问题的两种方法》缓存击穿问题也叫热点Key问题,就是⼀个被高并发访问并且缓存重建业务较复杂的key突然失效了,无数的请求访问会在瞬间给数据库带来巨大的冲击,本文给大家介绍了Re... 目录引言解决办法互斥锁(强一致,性能差)逻辑过期(高可用,性能优)设计逻辑过期时间引言缓存击穿:给

Linux系统中配置静态IP地址的详细步骤

《Linux系统中配置静态IP地址的详细步骤》本文详细介绍了在Linux系统中配置静态IP地址的五个步骤,包括打开终端、编辑网络配置文件、配置IP地址、保存并重启网络服务,这对于系统管理员和新手都极具... 目录步骤一:打开终端步骤二:编辑网络配置文件步骤三:配置静态IP地址步骤四:保存并关闭文件步骤五:重