Redis解决缓存一致性问题

文章目录

  • ☃️概述
  • ☃️数据库和缓存不一致采用什么方案
  • ☃️代码实现
  • ☃️其他


在这里插入图片描述

在这里插入图片描述


☃️概述

由于我们的 缓存的数据源来自于数据库, 而数据库的 数据是会发生变化的, 因此,如果当数据库中 数据发生变化,而缓存却没有同步, 此时就会有 一致性问题存在, 其后果是:

用户使用缓存中的过时数据,就会产生类似多线程数据安全问题,从而影响业务,产品口碑等;怎么解决呢?有如下几种方案

人工编码方式:缓存调用者在更新完数据库后再去更新缓存,也称之为双写方案

由系统本身完成:数据库与缓存的问题交由系统本身去处理

调用者只操作缓存:其他线程去异步处理数据库,实现最终一致


☃️数据库和缓存不一致采用什么方案

综合考虑使用方案一,但是方案一调用者如何处理呢?这里有几个问题

操作缓存和数据库时有三个问题需要考虑:

如果采用第一个方案,那么假设我们每次操作数据库后,都操作缓存,但是中间如果没有人查询,那么这个更新动作实际上只有最后一次生效,中间的更新动作意义并不大,我们可以把缓存删除,等待再次查询时,将缓存中的数据加载出来

  • 删除缓存还是更新缓存?

    • 更新缓存:每次更新数据库都更新缓存,无效写操作较多
    • 删除缓存:更新数据库时让缓存失效,查询时再更新缓存
  • 如何保证缓存与数据库的操作的同时成功或失败?

    • 单体系统,将缓存与数据库操作放在一个事务
    • 分布式系统,利用TCC等分布式事务方案

应该具体操作缓存还是操作数据库,我们应当是先操作数据库,再删除缓存,原因在于,如果你选择第一种方案,在两个线程并发来访问时,假设线程1先来,他先把缓存删了,此时线程2过来,他查询缓存数据并不存在,此时他写入缓存,当他写入缓存后,线程1再执行更新动作时,实际上写入的就是旧的数据,新的数据被旧数据覆盖了。

  • 先操作缓存还是先操作数据库?
    • 先删除缓存,再操作数据库
    • 先操作数据库,再删除缓存

在这里插入图片描述


☃️代码实现

根据id查询数据时,如果缓存未命中,则查询数据库,将数据库结果写入缓存,并设置超时时间

根据id修改数据时,先修改数据库,再删除缓存

@Transactionl
public Result update(){
//	执行更新逻辑//	删除缓存
}

☃️其他

要保证数据库和Redis缓存之间的一致性,可以采用以下策略:

  • 缓存-旁路(Cache-Aside,Lazy Loading):在这种方式中,应用程序首先检查缓存中是否存在所需数据。如果缓存中存在数据,则直接返回给应用程序。如果缓存中不存在数据,则从数据库中获取,然后将数据存储到缓存中以备后续请求使用。为了保持一致性,当数据库中的数据更新时,你需要显式地使缓存中对应的数据失效或更新,可以在数据库更新后立即删除或更新缓存中的数据。

  • 读写-通过(Read-Through,Write-Through):在这种模式下,应用程序同时向数据库和缓存读写数据。当数据库中的数据更新时,缓存中的数据也会同时更新。同样,当从缓存中读取数据时,如果不存在,就从数据库中获取,然后再存储到缓存中。这确保了数据库和缓存的数据保持一致。

  • 写入-通过(Write-Through):类似于读写-通过,但在这种方法中,当数据写入数据库时,也会立即写入缓存。然而,读取操作仍然是从缓存中进行。这有助于减少缓存未命中的次数。

  • 缓存失效(Cache Invalidation):不是在每次数据库更新时都更新缓存,你可以选择使受影响的数据缓存失效。这意味着从缓存中删除过期的数据,这样下一次读取操作将从数据库中获取最新的数据。缓存失效可以通过应用程序中的触发器或事件来实现,它们检测数据库中的更改,然后通知缓存使相应的数据失效。

  • 生存时间(Time-To-Live,TTL):你可以为缓存的数据设置过期时间。这样即使数据库发生了更新,缓存也会在一定时间后过期,然后重新从数据库获取新鲜数据。

通过采用这些策略中的一种或多种组合,你可以在应用程序中保持数据库和Redis缓存之间的一致性。每种方法都有其复杂性、性能和一致性保证方面的权衡,所以选择最适合你应用需求的策略即可。

在这里插入图片描述



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

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

相关文章

Python读取Excel表格文件并绘制多列数据的曲线图

本文介绍基于Python语言,读取Excel表格数据,并基于给定的行数范围内的指定列数据,绘制多条曲线图,并动态调整图片长度的方法。 首先,我们来明确一下本文的需求。现有一个.csv格式的Excel表格文件,其第一列为…

将本地项目上传到 gitee 仓库

1、创建 gitee 仓库 到 gitee 官网,新建仓库 配置新建仓库 完成仓库的创建 项目上传到仓库 上传项目需要安装git git官方下载地址:git下载地址 安装完成,前往本地项目所在文件夹,右击选择 Git Bash Here 刚下载完成需要配置G…

【全开源】Java养老护理助浴陪诊小程序医院陪护陪诊小程序APP源码

打造智慧养老服务新篇章 一、引言:养老护理的数字化转型 随着老龄化社会的到来,养老护理需求日益凸显。为了更好地满足老年人及其家庭的需求,我们推出了养老护理助浴陪诊小程序系统源码。该系统源码旨在通过数字化技术,优化养老…

语音控制系统的安全挑战与防御策略(上)

语音控制系统(VCS)提供了便捷的用户界面,涉及智能家居、自动驾驶汽车、智能客服等众多应用场景,已成为现代智能设备不可或缺的一部分。其市场规模预计到2023年达到70亿美元,这种扩张带来了重大的安全挑战,如…

走进智慧仓储:3D可视化工厂园区革新物流新纪元

在快节奏的现代生活中,物流仓储行业扮演着至关重要的角色。随着科技的飞速发展,传统仓储模式正面临一场前所未有的变革。今天,就让我们一起看看3D可视化技术如何为物流行业带来前所未有的便利与效率。 什么是3D可视化工厂园区? 3…

第13章 层次式架构设计理论与实践

层次式架构的核心思想是将系统组成为一种层次结构,每一层为上层服务,并作为下层客户。其实不管是分层还是其他的架构都是为了解耦,更好的复用,只要秉承着这种思想去理解一切都迎刃而解了。 13.1 层次上体系结构概述 回顾一下软件…

服务器数据恢复—EVA存储异常断电重启后虚拟机无法启动如何恢复数据?

服务器存储数据恢复环境: 某品牌EVA8400,服务器上安装VMware ESXi虚拟化平台,虚拟机的虚拟磁盘包括数据盘(精简模式)快照数据盘,部分虚拟机中运行oracle数据库和mysql数据库。 服务器存储故障&检测&…

python--pycharm中将venv删除后怎么办

在终端中输入以下命令来创建一个新的虚拟环境(可选): python -m venv venv 激活虚拟环境: Windows: .\venv\Scripts\activate选择自己项目的虚拟环境

一款颜值颇高的虚拟列表!差点就被埋没了,终于还是被我挖出来了

大家好,我是晓衡! 今天,推荐一款颇有颜值的虚拟列表组件,不然真的被埋没就可惜了! 我们先来看下效果: 感觉怎么样?还不错吧! 为什么说这个资源差点被埋没呢?因为个朋友找…

visual studis 安装教程

1、下载软件 2、直接安装。根据自己的需求选择需要的模板类型。 如果是.net环境,可以选择.net项目; 如果是c环境,可以选择c项目模板,多个模板可以同时并存。 3、选择C模板,然后重新启动项目。 我是小路,一枚…

python基础知识:py文件转换为jupyter文件

搜索了很多,都没什么用,会出现一些json错误,最终直接新建文件成功: 在自己电脑安装Anaconda,安装jupyter notebook,输入命令打开jupyter notebook: 在Anoconda命令行中cd到自己要转换文件的地址&#xff0…

【Android14 ShellTransitions】(一)开篇

说来惭愧,AndroidU都已经开发这么久了,但是我还没有整理过ShellTransition相关的知识。我本来希望能够系统的写一篇关于ShellTransition的笔记出来,但是发现一来这是一个比较庞大的模块,二来我个人能力有限,对ShellTra…

Tomcat端口配置

Tomcat是开源免费的服务器,其默认的端口为8080,本文讲述一下如何配置端口。 最后在浏览器中输入localhost:8888即可打开Tomcat界面

微信小程序中使用vantUI步骤

第一步,配置project.config.json 在setting中新增如下: "packNpmManually": true,"packNpmRelationList": [{"packageJsonPath": "./package.json","miniprogramNpmDistDir": "./"}], 第…

前端响应式期末作品

网页设计成品_前端响应式 主题:租房网站,共6个html页面,包含首页,登录注册,租房新闻,租房精选,租房详情,数据可视化页面(可以修改内容) 采用技术:…

河北奥润顺达集团研究院PMO经理常江南受邀为第十三届中国PMO大会演讲嘉宾

全国PMO专业人士年度盛会 河北奥润顺达集团研究院PMO经理、研发部运营管理办负责人常江南先生受邀为PMO评论主办的2024第十三届中国PMO大会演讲嘉宾,演讲议题为“初建PMO的体系宣贯和人员培养实践总结”。大会将于6月29-30日在北京举办,敬请关注&#xf…

香橙派 AiPro通过Micro USB接口进行串口调试

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、配置步骤1.安装CH343驱动2.配置串口参数 二、使用步骤总结 前言 最近在玩一个新玩具香橙派 AiPro,除了通过SSH方式连接开发板以外,…

Spring Security入门

一、Spring Security快速入门 官方文档: Spring Security :: Spring Security 功能: 身份认证(authentication)授权(authorization)防御常见攻击(protection against common attacks&#x…

RSC英国皇家化学学会文献查找下载

英国皇家化学学会(Royal Society of Chemistry,简称RSC)是以促进全球化学领域研究发展与传播为宗旨的国际权威学术机构,是化学信息的一个重要宣传机关和出版商。RSC出版的期刊是化学领域的核心期刊,大部分被SCI和MEDLINE收录,如An…

数字化校园的特征

"数字化校园"是校园信息化进入高级阶段的表现形式,信息技术与教育教育的交融应该更深化。因而,数字化校园应该具以下特征: 1.互联网络高速发展 网络是信息时代的根基,没有网络就无法完成教育信息化的绝大部分作业。数字…