iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >Redis的4种缓存模式分享
  • 774
分享到

Redis的4种缓存模式分享

Redis缓存模式缓存模式 2022-07-04 10:07:08 774人浏览 泡泡鱼
摘要

目录概述缓存策略的选择Cache AsideRead ThroughWrite ThroughWrite-Behind小结概述 在系统架构中,缓存可谓提供系统性能的最简单方法之一,稍微有点开发经验的同学必然会与缓存打过交

概述

在系统架构中,缓存可谓提供系统性能的最简单方法之一,稍微有点开发经验的同学必然会与缓存打过交道,最起码也实践过。

如果使用得当,缓存可以减少响应时间、减少数据库负载以及节省成本。但如果缓存使用不当,则可能出现一些莫名其妙的问题。

在不同的场景下,所使用的缓存策略也是有变化的。如果在你的印象和经验中,缓存还只是简单的查询、更新操作,那么这篇文章真的值得你学习一下。

在这里,为大家系统地讲解4种缓存模式以及它们的使用场景、流程以及优缺点。

缓存策略的选择

本质上来讲,缓存策略取决于数据和数据访问模式。换句话说,数据是如何写和读的。

例如:

  • 系统是写多读少的吗?(例如,基于时间的日志
  • 数据是否是只写入一次并被读取多次?(例如,用户配置文件)
  • 返回的数据总是唯一的吗?(例如,搜索查询)

选择正确的缓存策略才是提高性能的关键。

常用的缓存策略有以下五种:

  • Cache-Aside Pattern:旁路缓存模式
  • Read Through Cache Pattern:读穿透模式
  • Write Through Cache Pattern:写穿透模式
  • Write Behind Pattern:又叫Write Back,异步缓存写入模式

上述缓存策略的划分是基于对数据的读写流程来区分的,有的缓存策略下是应用程序仅和缓存交互,有的缓存策略下应用程序同时与缓存和数据库进行交互。因为这个是策略划分比较重要的一个维度,所以在后续流程学习时大家需要特别留意一下。

Cache Aside

Cache Aside是最常见的缓存模式,应用程序可直接与缓存和数据库对话。Cache Aside可用来读操作和写操作。

读操作的流程图:

Redis的4种缓存模式分享

读操作的流程:

  • 应用程序接收到数据查询(读)请求;
  • 应用程序所需查询的数据是否在缓存上:
    • 如果存在(Cache hit),从缓存上查询出数据,直接返回;
    • 如果不存在(Cache miss),则从数据库中检索数据,并存入缓存中,返回结果数据;

这里我们需要留意一个操作的边界,也就是数据库和缓存的操作均由应用程序直接进行操作。

写操作的流程图:

Redis的4种缓存模式分享

这里的写操作,包括创建、更新和删除。在写操作的时候,Cache Aside模式是先更新数据库(增、删、改),然后直接删除缓存。

Cache Aside模式可以说适用于大多数的场景,通常为了应对不同类型的数据,还可以有两种策略来加载缓存:

  • 使用时加载缓存:当需要使用缓存数据时,从数据库中查询出来,第一次查询之后,后续请求从缓存中获得数据;
  • 预加载缓存:在项目启动时或启动后通过程序预加载缓存信息,比如”国家信息、货币信息、用户信息,新闻信息“等不是经常变更的数据。

Cache Aside适用于读多写少的场景,比如用户信息、新闻报道等,一旦写入缓存,几乎不会进行修改。该模式的缺点是可能会出现缓存和数据库双写不一致的情况。

Cache Aside也是一个标准的模式,像Facebook便是采用的这种模式。

Read Through

Read-Through和Cache-Aside很相似,不同点在于程序不需要关注从哪里读取数据(缓存还是数据库),它只需要从缓存中读数据。而缓存中的数据从哪里来是由缓存决定的。

Cache Aside是由调用方负责把数据加载入缓存,而Read Through则用缓存服务自己来加载,从而对应用方是透明的。Read-Through的优势是让程序代码变得更简洁。

这里就涉及到我们上面所说的应用程序操作边界问题了,直接来看流程图:

Redis的4种缓存模式分享

在上述流程图中,重点关注一下虚线框内的操作,这部分操作不再由应用程序来处理,而是由缓存自己来处理。也就是说,当应用从缓存中查询某条数据时,如果数据不存在则由缓存来完成数据的加载,最后再由缓存返回数据结果给应用程序。

Write Through

在Cache Aside中,应用程序需要维护两个数据存储:一个缓存,一个数据库。这对于应用程序来说,有一些繁琐。

Write-Through模式下,所有的写操作都经过缓存,每次向缓存中写数据时,缓存会把数据持久化到对应的数据库中去,且这两个操作在一个事务中完成。因此,只有两次都写成功了才是最终写成功了。坏处是有写延迟,好处是保证了数据的一致性。

可以理解为,应用程序认为后端就是一个单一的存储,而存储自身维护自己的Cache。

因为程序只和缓存交互,编码会变得更加简单和整洁,当需要在多处复用相同逻辑时这点就变得格外明显。

Redis的4种缓存模式分享

当使用Write-Through时,一般都配合使用Read-Through来使用。Write-Through的潜在使用场景是银行系统。

Write-Through适用情况有:

  • 需要频繁读取相同数据
  • 不能忍受数据丢失(相对Write-Behind而言)和数据不一致

在使用Write-Through时要特别注意的是缓存的有效性管理,否则会导致大量的缓存占用内存资源。甚至有效的缓存数据被无效的缓存数据给清除掉。

Write-Behind

Write-Behind和Write-Through在”程序只和缓存交互且只能通过缓存写数据“这方面很相似。不同点在于Write-Through会把数据立即写入数据库中,而Write-Behind会在一段时间之后(或是被其他方式触发)把数据一起写入数据库,这个异步写操作是Write-Behind的最大特点。

数据库写操作可以用不同的方式完成,其中一个方式就是收集所有的写操作并在某一时间点(比如数据库负载低的时候)批量写入。另一种方式就是合并几个写操作成为一个小批次操作,接着缓存收集写操作一起批量写入。

异步写操作极大的降低了请求延迟并减轻了数据库的负担。同时也放大了数据不一致的。比如有人此时直接从数据库中查询数据,但是更新的数据还未被写入数据库,此时查询到的数据就不是最新的数据。

小结

不同的缓存模式有不同的考量点和特征,根据应用程序需求场景的不同,需要灵活的选择适配的缓存模式。在实践的过程中往往也是多种模式相结合来使用。

到此这篇关于Redis的4种缓存模式分享的文章就介绍到这了,更多相关Redis缓存模式内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

您可能感兴趣的文档:

--结束END--

本文标题: Redis的4种缓存模式分享

本文链接: https://www.lsjlt.com/news/33175.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Redis的4种缓存模式分享
    目录概述缓存策略的选择Cache AsideRead ThroughWrite ThroughWrite-Behind小结概述 在系统架构中,缓存可谓提供系统性能的最简单方法之一,稍微有点开发经验的同学必然会与缓存打过交...
    99+
    2022-07-04
    Redis缓存模式 缓存模式
  • redis更新缓存有几种模式
    redis更新缓存有几种模式?针对这个问题,今天小编总结了这篇文章,希望能帮助更多想解决这个问题的朋友找到更加简单易行的办法。redis更新缓存的Design Pattern有四种:Cache aside,...
    99+
    2022-10-18
  • redis实现缓存的两种方式
    本篇文章给大家分享的是有关redis实现缓存的两种方式,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。redis实现缓存大致为两种措施:一、脚本...
    99+
    2022-10-18
  • Redis缓存IO模型的示例分析
    Redis缓存IO模型的示例分析,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。前言redis作为应用最广泛的nosql数据库之一,大大小小也经历过很多次升级。在4.0版本之...
    99+
    2023-06-21
  • 分享JavaScript的 3 种工厂模式的用法
    目录一、简单工厂模式二、工厂方法模式三、抽象工厂模式四、小结前言; 工厂模式(Factory Pattern)是设计模式中最常用的设计模式之一。 这种类型的设计模式属于创建型模式,它...
    99+
    2022-11-13
  • redis分布式共享内存的方法是什么
    Redis分布式共享内存的方法主要有以下几种:1. Redis Cluster:Redis Cluster是Redis官方推出的分布...
    99+
    2023-08-23
    redis
  • Spring中Bean的4种依赖检查模式分别是什么
    这期内容当中小编将会给大家带来有关Spring中Bean的4种依赖检查模式分别是什么,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。下面我们来看看Spring中的Bean的4中依赖检查模式:simple,o...
    99+
    2023-06-17
  • Redis如何实现分布式缓存的扩展性
    Redis是一款开源的内存数据库,具有高速读写、数据持久化等优势,是现在企业级应用中广泛使用的缓存服务。针对分布式缓存,Redis提供了多种扩展性方案,使其能够高效地满足企业高并发业务,本文将重点讨论Redis如何实现分布式缓存的扩展性。一...
    99+
    2023-11-07
    redis 分布式缓存 扩展性
  • Redis分布式锁防止缓存击穿的实现
    缓存击穿 和缓存穿透不同的是,缓存击穿是指:缓存中没有,但是数据库中存在的热点数据。 例如:首页的热点新闻,并发访问量非常大的热点数据,如果缓存过期失效,服务器会去查询DB,这时候如...
    99+
    2022-11-13
  • 分布式缓存Redis与Memcached的优缺点区别比较
    目录Memcache与Redis的区别都有哪些?1)、存储方式2)、数据支持类型3)、使用底层模型不同4),value大小redis相比memcached有哪些优势?使用redis有...
    99+
    2022-12-14
    Redis Memcache
  • Redis中关于分布式缓存的面试题有哪些
    这篇文章将为大家详细讲解有关Redis中关于分布式缓存的面试题有哪些,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。面试题redis 和 memcached 有什么区别?r...
    99+
    2022-10-18
  • Web应用的缓存设计模式举例分析
    本篇内容介绍了“Web应用的缓存设计模式举例分析”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!ORM缓存引...
    99+
    2022-10-19
  • 分布式缓存Redis Cluster在华泰证券的探索与实践
    本文选自《交易技术前沿》总第三十期文章(2018年3月) 作者:樊建 陈营 葛宝磊/华泰证券股份有限公司 摘要:Redis Cluster作为最热门的开源分布式缓存,在券商领域会有怎样的应用场景?...
    99+
    2022-10-18
  • 以Redis为例,详谈分布式系统缓存的细枝末节
    前言:在分布式Web程序设计中,解决高并发以及内部解耦的关键技术离不开缓存和队列,而缓存角色类似计算机硬件中CPU的各级缓存。如今的业务规模稍大的互联网项目,即使在最初beta版的开发上,都会进行预留设计。但是在诸多应用场景里,也带来了某些...
    99+
    2023-06-02
  • DCache 分布式存储系统List 缓存模块的创建与使用
    DCache是一个分布式存储系统,其中的List缓存模块用于存储和管理列表数据。下面是DCache List缓存模块的创建和使用步骤...
    99+
    2023-09-28
    DCache
  • 进一步了解C++函数的各种参数以及重载,了解C++部分的内存模型,C++独特的引用方式,巧妙替换指针,初步了解类与对象。满满的知识,希望大家能多多支持
    C++的编程精华,走过路过千万不要错过啊!废话少说,我们直接进入正题!!!! 函数高级 C++的函数提高 函数默认参数 在C++中,函数的形参列表中的形参是可以有默认值的。 语法:返回值类型 函数名 (参数 = 默认值){} 示例: #...
    99+
    2023-09-17
    c语言 c++ 开发语言 java 核心编程
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作