• redis探索之常用的三种缓存读写策略


            使用 Redis常见的缓存读写策略有三种分别是:旁路缓存,读写穿透和异步缓存写入。

            首先,三种策略并没有高低之说,只是侧重点不同。接下来我给大伙挨个讲一讲。

    旁路缓存(Cache Aside Pattern)

            服务端同时维护Mysql和Redis,并且以Mysql的主要存储。

            策略规定在查数据时,先从Redis中读。如果Redis中没有,再从Mysql中读取,并将结果返回。再写入Redis,避免下次读取依然查不到。

            策略规定在写数据时,先写Mysql,再删除Redis。

            旁路缓存是最为广泛应用的一种读写策略。当然,这个策略也不是完美的,也会存在一致性问题。 

     

    读写穿透(Read Write Through Pattern)

            策略视Redis为主要存储。

            策略规定在读数据时,先从Redis中读。读到直接返回。没有读到就从Mysql中读取数据放入到Redis中后,再返回数据。

            策略规定在写数据时,先看Redis中是否存在该数据,存在则先更新换,再更新数据库。

     

            我觉得该策略存在两个问题:① 读数据时先更新缓存再返回结果会降低查询接口的处理速度,② 写数据时先更新缓存可能会导致缓存一致性问题。 

    异步缓存写入(Write Behind Pattern)

            这种策略是三种策略中最少出现在项目中的。跟读写穿透策略有些许类似,他们都是以Redis作为主战场。区别是读写穿透直接更新数据库,而该策略选择集中同步到Mysql数据库。策略存在一个较大的风险,如果缓存服务挂掉了,就容易出现不一致的情况。

            有两个比较著名应用场景:消息队列中消息异步写入磁盘和InnoDB的Buffer Pool。这两个场景都是关于持久化的。

    缓存读写策略与延迟双删是什么关系?

            不知道有多少小伙伴有这种疑问。但至少作为初学者的我,刚看到这块的时候,是有这个疑问的。因为缓存读写策略要解决缓存一致性问题,延迟双删也是要解决缓存一致性问题。然后其实这个问题很简单,我们大多数使用的是旁路缓存策略,但是旁路缓存策略在很多情况还是会存在一致性问题。为了解决这个问题,就出现了延迟双删策略。延迟双删是对旁路缓存的一个优化。

            这个对知识融会贯通的过程也对我很有益,特此记录一下。

  • 相关阅读:
    macOS下matplotlib如何显示中文字体?
    Qt+ECharts开发笔记(三):ECharts的柱状图介绍、基础使用和Qt封装Demo
    一个.Net Core开发的开源动态壁纸软件
    剑指offer——JZ7 重建二叉树 解题思路与具体代码【C++】
    Facebook广告被暂停是什么原因?广告账号被封怎么办?
    抛弃moment.js,基于date-fns封装日期相关utils
    国密SM2加解密 for delphi xe 11.1
    [源码解析] TensorFlow 分布式 DistributedStrategy 之基础篇
    【C++编程能力提升】
    云原生时代的DevOps平台设计之道
  • 原文地址:https://blog.csdn.net/qq_22156459/article/details/126460523