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

embedded/2024/10/19 3:33:22/

使用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中





http://www.ppmy.cn/embedded/40942.html

相关文章

Electron 报错:WinState is not a constructor

文章目录 问题分析 问题 在使用 electron-win-state 库时报错如下 代码如下: const WinState require(electron-win-state) const winState new WinState({ defaultWidth: 800,defaultHeight: 600,// other winState options, see below })const browserWindow…

出差——蓝桥杯十三届2022国赛大学B组真题

问题分析 该题属于枚举类型&#xff0c;遍历所有情况选出符合条件的即可。因为只需要派两个人&#xff0c;因此采用两层循环遍历每一种情况。 AC_Code #include <bits/stdc.h> using namespace std; string str;//选择的两人 bool ok(){if(str.find("A")!-1…

微调大模型学习记录

微调大模型基本思路 一般来说, 垂直领域的现状就是大家积累很多垂域数据,从现实出发,第一步可以先做增量训练.所以会把模型分成3个阶段: (1)、第一阶段:(Continue PreTraining)增量预训练&#xff0c;在海量领域文档数据&#xff08;领域知识&#xff09;上二次预训练base模型…

使用 PXE+Kickstart 批量网络自动装机

前言&#xff1a; 正常安装系统的话使用u盘一个一个安装会非常慢&#xff0c;所以批量安装的技术就出来了。 一、 概念 PXE &#xff08;Preboot eXecute Environment&#xff0c;预启动执行环境&#xff09;是由 Intel 公司开发的技术&#xff0c;可以让计算机通过网络来启动…

可重构柔性装配产线:为工业制造领域注入了新的活力

随着科技的飞速发展&#xff0c;智能制造正逐渐成为引领工业革新的重要力量。在这一浪潮中&#xff0c;可重构柔性装配产线以其独特的技术优势和创新理念&#xff0c;为工业制造领域注入了新的活力&#xff0c;开启了创新驱动的智能制造新篇章。 可重构柔性装配产线是基于富唯智…

liunx杀掉正在运行中的进程端口

API对接平台一键对接ChatGPT3.5/4.0&#xff0c;Claude3&#xff0c;文心一言等AI模型&#xff0c;无需翻墙&#xff0c;国外信用卡&#x1f449;AI模型聚合API-海鲸AI 在Linux系统中&#xff0c;如果你想要杀掉监听在7860端口上的进程&#xff0c;你可以按照以下步骤操作&…

学习opencv

三年前接触过opencv&#xff0c;但一直停留在调用api的阶段&#xff0c;对图像处理的原理没有一定的深入&#xff0c;今天开始想真正深入一下opencv&#xff0c;先写一下自己的疑惑&#xff0c;就当笔记了 单通道是啥意思&#xff0c;单通道只包含一个颜色通道&#xff0c;一般…

[muduo网络库]——muduo库TcpConnection类,万字总结(剖析muduo网络库核心部分、设计思想)

接着之前我们[muduo网络库]——muduo库Buffer类&#xff08;剖析muduo网络库核心部分、设计思想&#xff09;&#xff0c;我们接下来继续看muduo库中的TcpConnection类。 TcpConnection类 TcpConnection类是muduo最核心的类&#xff0c;这个类主要封装了一个已建立的TCP连接&…