Redis-2 双写一致性

  • 双写一致性

一.什么是双写一致性?

在数据库中的数据修改后,也要修改缓存中的数据,保证数据库与缓存中保存的数据一致。

二.如何保证双写一致性?

回答该问题一定要结合自己的项目,说明自己的项目是必须强一致性还是允许延迟一致。

针对必须强一致性的项目:

方案一.延迟双删

1.实施:依次执行操作:删除缓存——修改数据库——延时——删除缓存

2.为什么要两次删除缓存:

(1)第一次删除缓存是因为:修改数据库中的数据后,缓存中保存的相当于过期数据,所以删除。

(2)第二次删除是因为:假设线程1删除了缓存中的数据,但还未修改数据库中的数据;此时线程2得到了时间片去查询已经被删除的数据,由于缓存中的数据已经被删除,线程2会进行缓存重建,把数据库中的数据又重新写入缓存;当线程1重新获得时间片修改完数据库后,就会出现数据库与缓存中的数据不一致的情况,因此还需要再删除一次缓存。

3.为什么要延时:

通常情况下数据库采用主从模式,延时是为了等待数据库将数据从主节点同步到从节点。

方案二.分布式锁

1.使用两把锁:

(1)共享锁:又叫读锁readlock,加锁之后,其他线程可以共享读操作,但不能进行写操作。

(2)排他锁:又叫独占锁writelock,加锁之后,其他线程的读写操作都被阻塞。

2.使用:在进行读操作时添加共享锁,读读不互斥,写互斥;在进行写操作时添加独占锁,读写互斥。

针对允许延迟一致的项目:

方案一.使用消息队列MQ

1.实施:进行修改数据库操作后,会发送消息给MQ;缓存服务会监听MQ,收到数据库修改操作的信息后,会更新缓存,以此来保持数据的最终一致性。

方案二.使用Canal

1.实施:进行修改数据库操作后,数据库会将该操作记录到二进制日志文件binlog中,canal会监听数据库的binlog,发现修改操作后会通知缓存服务更新缓存,以此来保持数据的最终一致性。

2.优点:对业务代码几乎零侵入。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/9249.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JavaWeb之过滤器(Filter)与监听器(Listener)

前言 过滤器(Filter) 1.什么是过滤器 2.过滤器的语法格式 3.使用场景 3.1.如何防止用户未登录就执行后续操作 3.2.设置编码方式--统一设置编码 3.3.加密解密(密码的加密和解密) 3.4.非法文字筛选 3.5.下载资源的限制 监听器(Listener) 1.什么是监听器 2.监听器分类…

请介绍下重要的CUDA API

CUDA(Compute Unified Device Architecture)是由NVIDIA推出的通用并行计算架构,它提供了一系列API供开发者调用,以充分利用GPU进行高性能计算。以下是一些重要的CUDA API: CUDA Runtime API: 这是CUDA编程…

Ci24R1 (SOP8)2.4GHz无线收发一体、双向系统的智能家居芯片

Ci24R1 (SOP8)工作范围在2.4GHzISM频段,专为低系统应用成本的无线场合设计,集成嵌入式ARQ基带协议引擎的无线收发器芯片。它的工作频率范围为2400MHz-2525MHz,共有126个1MHz带宽的信道。 Ci24R1 (SOP8&…

IPFoxy Tips:什么是静态住宅IP?静态ISP代理指南

静态住宅代理(也称为静态ISP代理)是最流行的代理类型之一。它们也是隐藏您的身份并保持在线匿名的最佳方法之一。您为什么要使用住宅代理而不是仅使用常规代理服务?下面我具体分享。 一、什么是静态住宅代理? 首先,我…

无监督式学习

1.是什么? 无监督式学习与监督式学习**最大的区别就是:**没有事先给定的训练实例,它是自动对输入的示例进行分类或者分群; 优点:不需要标签数据,极大程度上扩大了我们的数据样本,其次不受监督信…

STC8增强型单片机开发day02

逻辑分析仪 什么是逻辑分析仪 逻辑分析仪(Logic Analyzer)是一种工具,用于分析数字信号,例如控制信号,时钟信号等等。它可以用于调试和验证数字电路、嵌入式系统等等 本人采用的是mini版USB 逻辑分析仪。总共有10个…

刷题《面试经典150题》(第九天)

加油! 学习目标:学习内容:学习时间:知识点学习内容:跳跃游戏 II - 力扣(LeetCode)H 指数 - 力扣(LeetCode)盛最多水的容器 - 力扣(LeetCode)矩阵置…

Spring学习笔记

目录 1. Spring有什么优势 1.1 模块化 1.2 轻量级 1.3 方便集成各种优秀框架 1.4 提供了分层开发下的完整技术解决方案 1.5 Java语言编写的开源框架,使用了多种设计模式 2. Spring的第一个程序 2.1 开发环境 2.2 环境搭建 2.3 编码测试 2.4 BeanFactory的UML类图…

pytest教程-42-钩子函数-pytest_runtest_makereport

领取资料,咨询答疑,请➕wei: June__Go 上一小节我们学习了pytest_runtest_teardown钩子函数的使用方法,本小节我们讲解一下pytest_runtest_makereport钩子函数的使用方法。 pytest_runtest_makereport 钩子函数在 pytest 为每个测试生成报…

交易复盘-20240509

仅用于记录当天的市场情况,用于统计交易策略的适用情况,以便程序回测 短线核心:不参与任何级别的调整,采用龙空龙模式 一支股票 10%的时候可以操作, 90%的时间适合空仓等待 百合花 (4)|[9:25]|[17717万]|1.93 时代万恒…

多线程学习D10 收尾了应该

线程安全集合类概述 重点介绍java.util.concurrent.* 下的线程安全集合类,可以发现它们有规律,里面包含三类关键词:Blocking、CopyOnWrite、Concurrent Blocking 大部分实现基于锁,并提供用来阻塞的方法 CopyOnWrite 之类容器修改…

代码随想录刷题随记31-贪心5

代码随想录刷题随记31-贪心5 435. 无重叠区间 leetcode链接 按照右边界排序,从左向右记录非交叉区间的个数。 此时问题就是要求非交叉区间的最大个数。 这里记录非交叉区间的个数还是有技巧的,如图: 左边界排序可不可以呢? 也是…

多态的概念及运用

多态 概念:多态是指同一种行为具有多个不同的表现形式或形态的能力。在Java中,多态是指一个对象的实际类型可以是其父类或接口类型,但在运行时会根据其实际类型来调用相应的方法。是面向对象的第三大特征,建立于封装和继承之上。…

mysql安装及基础设置

关系型数据库 MySQL是一种关系型数据库管理系统,采用了关系模型来组织数据的数据库,关系数据库将数据保存在不同的表中,用户通过查询 sql 来检索数据库中的数据。 yum 方式安装 mysql # yum -y install mysql-server # systemctl start my…

信号槽机制

目录 信号槽机制 Qt 中的信号 槽函数 槽函数定义 通过代码创建槽函数 通过ui文件创建槽函数 自定义信号 带参数的信号与槽 信号槽断开绑定 信号槽机制 信号和槽机制是 Qt 中一个非常重要的一个机制, 因为有信号和槽机制, 就可以通过某些条件的触发来调用这些槽函数, …

[力扣题解]131. 分割回文串

题目:131. 分割回文串 思路 回溯法 切割问题:在某个地方画一个挡板,比如aab可以画成:a|ab,a|a|b,每个字母之间理论上都可画一个挡板; 抽象成当前n个字母,画一道挡板,挡…

Django框架之Ajax进阶

一、前后端传输数据的编码格式(contentType) 此内容主要是研究post请求数据的编码格式,因为get请求数据就是直接放在url后面的。 首先我们在前面叙述过可以朝后端发送post请求的方式有 form表单Ajax 然后现在又了解到前后端传输数据的编码格式有 urlencodedfor…

啰嗦一下开发语言

这次不发版了,直接啰嗦一下吧 MySQL Binlog Digger 4.33这个版本一直迟迟没有推出,因为原来用Python写的版本已经没有多少优化的空间了,而号称性能强劲的Python 3.13官方一直没发版。 Python编写效率高是人所共知,但Python执行效…

ASP.NET信息安全研究所设备管理系统的设计与实现

摘 要 以研究所的设备管理系统为背景,以研究所设备管理模式为研究对象,开发了设备管理系统。设备管理系统是设备管理与计算机技术相结合的产物,根据系统的功能需求分析与定义的数据模式,分析了应用程序的主要功能和系统实现的主…

zabbix动作执行命令失效不起作用?

1. zabbix在web界面设置完主机组,主机,监控项,触发器,动作之后 监控项监控到了,触发器触发动作,但是执行的指令不起作用 流程 在zabbix-agent端将nginx服务down掉,zabbix会自动监控并执行重启的…