• 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。这两个场景都是关于持久化的。

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

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

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

  • 相关阅读:
    云原生系列 【轻松入门容器基础操作】
    c# 设计剪刀石头布游戏
    如何使用 Loadgen 来简化 HTTP API 请求的集成测试
    导致爬虫无法使用的原因有哪些?
    Codeforces Round #833 (Div. 2) C. Zero-Sum Prefixes
    MyBatisPlus学习(3)—— MyBatisPlus中的通用Service接口
    halcon 算子shape_trans
    SquareCTF-2023 Web Writeups
    【Kotlin】by lazy关键字的实现原理
    二次封装这几个 element-ui 组件后,让代码更加优雅了
  • 原文地址:https://blog.csdn.net/qq_22156459/article/details/126460523