Redis缓存双删(使用Redis如何保证数据库和缓存之间的同步)

2024-05-13 17:36

本文主要是介绍Redis缓存双删(使用Redis如何保证数据库和缓存之间的同步),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

使用Redis如何保证数据库和缓存之间的同步

通常我们有以下几种策略:

  1. 先修改数据库再更新缓存(不建议):该策略的问题是如果数据库更新成功了Redis 修改失败了,也会导致不同步的问题

  2. 先修改缓存再更新数据库(不建议):该策略的问题是,如果Redis 修改成功了,数据库没有修改成功,导致数据不一致。

  3. 先删除缓存再更新数据库:为了解决上述问题,使用该方式一定程度上解决了上述的问题,执行的步骤如下,假如有两个方法,update和getAndAdd一个用来更新缓存,一个用来新增缓存:

    1. update 首先先删除缓存,然后更新数据库
    2. getAndAdd 方法 首先尝试从缓存中获取数据,
    3. 此时由于缓存已经被删除,尝试从数据库中获取数据,并放入缓存
  4. 缓存双删(建议使用):使用上述方式其实还会存在一定问题,例如还是上述两个方法:

    1. update 方法首先先删除缓存
    2. getAndAdd 方法此时从Redis 中获取数据,没有获取到数据,从数据库中获取数据并放入Redis,由于此时数据库中的数据还没有更新此时获取到的数据则是旧数据
    3. update 方法继续更新数据库数据
    4. getAndAdd 第二次被调用,发现Redis 中存在数据,则没有从数据库中更新数据到Redis 当中,就导致了数据还是老数据,并非最数据

    所以此时需要使用两次删除:

    1. update 方法首先先删除缓存
    2. getAndAdd 方法此时从Redis 中获取数据,没有获取到数据,从数据库中获取数据并放入Redis,由于此时数据库中的数据还没有更新此时获取到的数据则是旧数据
    3. update 方法继续更新数据库数据,并再次对缓存进行删除
    4. getAndAdd 第二次被调用,尝试从Redis 中获取不到数据,从数据库获取数据并放入到Redis中




这篇关于Redis缓存双删(使用Redis如何保证数据库和缓存之间的同步)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/986367

相关文章

使用Dify访问mysql数据库详细代码示例

《使用Dify访问mysql数据库详细代码示例》:本文主要介绍使用Dify访问mysql数据库的相关资料,并详细讲解了如何在本地搭建数据库访问服务,使用ngrok暴露到公网,并创建知识库、数据库访... 1、在本地搭建数据库访问的服务,并使用ngrok暴露到公网。#sql_tools.pyfrom

使用mvn deploy命令上传jar包的实现

《使用mvndeploy命令上传jar包的实现》本文介绍了使用mvndeploy:deploy-file命令将本地仓库中的JAR包重新发布到Maven私服,文中通过示例代码介绍的非常详细,对大家的学... 目录一、背景二、环境三、配置nexus上传账号四、执行deploy命令上传包1. 首先需要把本地仓中要

Spring Cloud之注册中心Nacos的使用详解

《SpringCloud之注册中心Nacos的使用详解》本文介绍SpringCloudAlibaba中的Nacos组件,对比了Nacos与Eureka的区别,展示了如何在项目中引入SpringClo... 目录Naacos服务注册/服务发现引⼊Spring Cloud Alibaba依赖引入Naco编程s依

Java springBoot初步使用websocket的代码示例

《JavaspringBoot初步使用websocket的代码示例》:本文主要介绍JavaspringBoot初步使用websocket的相关资料,WebSocket是一种实现实时双向通信的协... 目录一、什么是websocket二、依赖坐标地址1.springBoot父级依赖2.springBoot依赖

Java使用Mail构建邮件功能的完整指南

《Java使用Mail构建邮件功能的完整指南》JavaMailAPI是一个功能强大的工具,它可以帮助开发者轻松实现邮件的发送与接收功能,本文将介绍如何使用JavaMail发送和接收邮件,希望对大家有所... 目录1、简述2、主要特点3、发送样例3.1 发送纯文本邮件3.2 发送 html 邮件3.3 发送带

Java实现数据库图片上传功能详解

《Java实现数据库图片上传功能详解》这篇文章主要为大家详细介绍了如何使用Java实现数据库图片上传功能,包含从数据库拿图片传递前端渲染,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1、前言2、数据库搭建&nbsChina编程p; 3、后端实现将图片存储进数据库4、后端实现从数据库取出图片给前端5、前端拿到

IDEA连接达梦数据库的详细配置指南

《IDEA连接达梦数据库的详细配置指南》达梦数据库(DMDatabase)作为国产关系型数据库的代表,广泛应用于企业级系统开发,本文将详细介绍如何在IntelliJIDEA中配置并连接达梦数据库,助力... 目录准备工作1. 下载达梦JDBC驱动配置步骤1. 将驱动添加到IDEA2. 创建数据库连接连接参数

使用DeepSeek搭建个人知识库(在笔记本电脑上)

《使用DeepSeek搭建个人知识库(在笔记本电脑上)》本文介绍了如何在笔记本电脑上使用DeepSeek和开源工具搭建个人知识库,通过安装DeepSeek和RAGFlow,并使用CherryStudi... 目录部署环境软件清单安装DeepSeek安装Cherry Studio安装RAGFlow设置知识库总

Linux搭建Mysql主从同步的教程

《Linux搭建Mysql主从同步的教程》:本文主要介绍Linux搭建Mysql主从同步的教程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录linux搭建mysql主从同步1.启动mysql服务2.修改Mysql主库配置文件/etc/my.cnf3.重启主库my

Jmeter如何向数据库批量插入数据

《Jmeter如何向数据库批量插入数据》:本文主要介绍Jmeter如何向数据库批量插入数据方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Jmeter向数据库批量插入数据Jmeter向mysql数据库中插入数据的入门操作接下来做一下各个元件的配置总结Jmete