如何解决Redis的双写一致性

news/2024/11/7 8:27:31/

目录

    • 1.更新策略
    • 2.问题场景
    • 3.解决方案


1.更新策略

Redis和MySQL的默认的更新策略是旁路缓存策略,旁路缓存策略又有写策略和读策略

写策略:更新时,先更新数据库,再更新缓存

读策略:读取数据时,如果命中缓存,就直接返回;如果未命中缓存,就查询数据库,并构建缓存,再将数据返回


2.问题场景

更新数据时,按照默认策略,首先会更新数据库,再删除缓存

但是并发情况下,有其他线程再读取到该数据的旧值,而恰好该数据是第一次访问,未构建缓存,就上面的删除缓存后重新构建了,导致缓存中的仍然是旧值,数据库里的是新值。

如此导致数据库中的数据和缓存中的不一致。详情流程可见下图

在这里插入图片描述


3.解决方案

方案1:Redis给key设置较短的过期时间,即使数据不一致,数据很快也会过期。缺点就是会影响缓存命中率

方案2:采用延时双删策略。

(1)先淘汰缓存
(2)再更新数据库
(3)休眠相应的时间后,再次清除缓存

它的原理就是:写请求先删缓存,如果这时有读请求就会构建一个旧缓存,第(3)步休息相应的时间,就是为了保证旧缓存构建成立,写请求然后醒来就把旧缓存给清除掉,下次读操作就会直接到数据库中读取新值了。

它缺点也很明显,这个休眠时间不是很好把握,所以该策略不是很推荐使用。


http://www.ppmy.cn/news/64145.html

相关文章

Centos-7 安装 RabbitMQ指定版本并配置

一站式流程,从安装到抬走,就这一篇文章就够了! PS:网上的大哥们,你们写文章好歹自己测试一下啊。。。/(ㄒoㄒ)/~~ 1. 来这个网址找到 RabbitMQ 与 Erlang 版本对应关系 RabbitMQ Erlang Version Requirements — Ra…

【Spring Cloud Alibaba】Nacos config的使用和高阶用法

文章目录 🐍第一步,创建配置文件到nacos中🐍第二步,在项目中配置nacos的地址和指定文件🐍第三步,读取配置文件🐦高阶用法🐦高阶用法一:使用yaml文件🐦第一步&…

【Hello Network】网络编程套接字(三)

作者:小萌新 专栏:网络 作者简介:大二学生 希望能和大家一起进步 本篇博客简介:简单介绍下各种类型的Tcp协议 各种类型Tcp服务器 多进程版的TCP网络程序捕捉SIGCHLD信号让孙子进程执行任务 多线程TCP网络程序线程池版多线程TCP网络…

刘媛媛学习方法笔记

底层策略专业方法执行技术在当下这个时代,天才是3%的努力加97%不被互联网分心的能力。 学习方程式 主:学习时间,学习时精力,注意力,目标,策略 次:学习动机 学习动机 证明自己的能力。正向循环对知识有好奇心。正向循环为了学历。缺陷赚钱。缺陷为了别人的期待。痛苦 3…

JavaScript中的数据类型和类型转换问题

JavaScript是一种动态类型的编程语言,它的变量不需要在声明时指定类型,可以根据变量的值自动推断类型。JavaScript中有许多数据类型,包括基本数据类型和复杂数据类型。在本文中,我们将介绍JavaScript中的数据类型和类型转换问题。…

C++基础-介绍·数据结构·排序·算法

C基础-介绍数据结构排序算法 特点使用方向RPC数据结构栈 Stack堆 Heap队列 List数组 Array链表 LinkTable树 Tree(普通)二叉树二叉查找树 Tree Search平衡二叉树红黑树 冒泡排序选择排序Insertsort 插入排序Quicksort 快速排序Binarysearch 二分查找/折半…

开源智慧家居

与家居行业、服务行业等伙伴协同合作,努力创造社会价值,提升行业整体服务 水平,树立家居服务业统一售后标准,构建品质、高效、有温度的居家生活服务新生态。 为企业商家和个人客户提供家居配送、搬运、安装、维修、保养等服务。 …

《时间从来不语,却回答了所有问题》笔记三

目录 感悟 经典摘录 假若我再上一次大学 不完满才是人生 走运与倒霉 毁誉 我的座右铭 二月兰 观天池 火车上观日出 感悟 人这个万物之灵却偏偏有了感情,有了感情就有了悲欢。自古及今,海内海外,一个百分之百完满的人生是没有的&…