[Redis]——数据一致性,先操作数据库,还是先更新缓存?

news2024/11/24 9:45:02

目录

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

1.删除缓存还是更新缓存?

2.如何保证缓存与数据库的操作同时成功或失效

3.先操作缓存还是先操作数据库(多线程并发问题)

二、 缓存更新的最佳策略


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

1.删除缓存还是更新缓存?

  • 更新缓存:每次更新数据库都更新缓存,如果写多读少,这样效率太低。
  • 删除缓存:更新数据的同时让缓存失效,查询时再更新缓存。

🌳我们一般会采用删除缓存策略。

2.如何保证缓存与数据库的操作同时成功或失效

  • 单体系统,将缓存与数据库操作放在一个事务,利用事物本身原子性来保证。
  • 分布式系统,利用TCC等分布式事务方案。

3.先操作缓存还是先操作数据库(多线程并发问题

  • 先删除缓存,在操作数据库
  • 先操作数据库,在删除缓存

那哪一种比较好呢❓

解释:

        如果在线程1删除缓存,更新数据库的时候,线程2查询该数据,未命中,然后写入缓存,这就导致了数据库与缓存不一致,并且这种情况发生的概率很大,因为更新的时间可能是比较久的,而操作缓存是很快的,所以这种方式不好

另一种方式

 

解释:

         如果某一时刻,缓存突然失效了,线程1查询缓存未命中,准备写入缓存,这是线程2来更新数据库了,然后删除缓存,再然后线程1就要写入缓存了,数据又不一致了,但是这种情况发生的概率很小。

二、 缓存更新的最佳策略

主动更新缓存,并以超时剔除作为兜底方案,因为如果缓存过多可能导致内存不足

读操作:

  • 缓存命中直接返回
  • 未命中则查询数据库,并写入缓存,设定超时时间

写操作:

  • 先操作数据库,然后再删除缓存
  • 确保数据库和删缓存操作的一致性

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

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

相关文章

网络学习:Vlan间路由

目录 一、vlan间路由实现的方法 二、精确匹配转发(交换机)流程 三、最长匹配转发(路由器) 四、交换机最长匹配转发 五、总结 一、vlan间路由实现的方法 方法1:使用路由器的物理接口 特点:在路由器上…

LeetCode-第67题-二进制求和

1.题目描述 给你两个二进制字符串 a 和 b ,以二进制字符串的形式返回它们的和。 2.样例描述 3.思路描述 将两个二进制字符串转换成整型,然后相加后的整型转为二进制字符串 4.代码展示 class Solution(object):def addBinary(self, a, b):# 将字符串…

Linux 之二:CentOS7 的 IP 常用命令和配置及 xshell 基本使用方法

1. 进入虚拟机 点击右键---进入终端--输入 ip adrr 或 ifconfig 查看ip地址 下面输入命令 ifconfig(注意:不是 ipconfig ) 或 ip addr 来查看当前系统 IP 查看到IP 后,比如:上面是 192.168.184.137 1.1 IP 常用命令…

(文末送书)《低代码平台开发实践:基于React》

最近,我发现了一个超级强大的人工智能学习网站。它以通俗易懂的方式呈现复杂的概念,而且内容风趣幽默。我觉得它对大家可能会有所帮助,所以我在此分享。点击这里跳转到网站。 前些天发现了一个巨牛的人工智能学习网站,通俗易懂&am…

LeetCode234.回文链表

题目 给你一个单链表的头节点 head ,请你判断该链表是否为回文链表。如果是,返回 true ;否则,返回 false 。 示例 输入:head [1,2,2,1] 输出:true 输入:head [1,2] 输出:false 思…

mysql 时间精度问题

timestamp到2038年,还有14年时间,一个系统如果能活到那一刻也是相当不错了。 这里先看一下个datetime的问题,下面的插入数据的时间戳是2024-03-06 21:20:50.839 INSERT INTO psi_io_balance ( id, as_id, bill_date, order_id, busi_type, direction, c…

5. gin集成Gorm

文章目录 一:连接DB二:增删改查三:使用PostMan测试 代码地址:https://gitee.com/lymgoforIT/golang-trick/tree/master/24-gin-learning 本节主要介绍如何使用gin集成gorm,并完成用户的创建、修改、删除、查询等功能 …

使用Http请求下载文件带来的问题

java.io.IOException: Broken pipe 当使用http请求的方式将文件作为响应内容给浏览器,这个时候如果浏览器未开启自动下载(浏览器可能会终止这个tcp连接),文件不会下载成功,但是这个时候请求已经到达服务器,如果这个时候&#xff0…

《Vite 报错》ReferenceError: module is not defined in ES module scope

ReferenceError: module is not defined in ES module scope 解决方案 postcss.config.js 要改为 postcss.config.cjs,也就是 .cjs 后缀。 原因解析 下图提示,packages.json 中的属性 type 设置为 module。所有 *.js 文件现在都被解释为 ESM&#xff…

数据结构(七)——线性表的基本操作

🧑个人简介:大家好,我是尘觉,希望我的文章可以帮助到大家,您的满意是我的动力😉 在csdn获奖荣誉: 🏆csdn城市之星2名 ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ …

vscode c/c++ 检测到 #include 错误。请更新 includePath。

问题背景 使用vscode打开项目后,头文件显示红色波浪线,没有引入。 检测到 #include 错误。请更新 includePath。已为此翻译单元(xxx)禁用波形曲线。 解决方法 gcc -v -E -x c - 显示所有头文件路径。 打开c_cpp_properties.json文件,粘贴…

python+django+vue电影票订购系统dyvv4

电影院订票信息管理系统综合网络空间开发设计要求。目的是将电影院订票通过网络平台将传统管理方式转换为在网上操作,方便快捷、安全性高、交易规范做了保障,目标明确。电影院订票信息管理系统可以将功能划分为用户和管理员功能[10]。 语言:…

基于springboot+vue的疾病防控综合系统

博主主页:猫头鹰源码 博主简介:Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战,欢迎高校老师\讲师\同行交流合作 ​主要内容:毕业设计(Javaweb项目|小程序|Pyt…

QT安装教程,手把手教会QT安装

大家好:衷心希望各位点赞和评论! 安装步骤 首先去官网下载QT,官网:https://download.qt.io/https://download.qt.io/ 点击 offical_releases (官方发行版本),如下图所示: 进入下图所…

three.js如何实现简易3D机房?(二)模型加载的过渡动画

接上一篇: three.js如何实现简易3D机房?(一)基础准备-下:http://t.csdnimg.cn/TTI1P 目录 六、自定义过渡动画 1.过渡动画组件 2.模型加载时使用 根据模型大小,可以自定义模型加载的过渡动画效果&am…

某多多anti_token(先水个文后续会完善)第一部分

声明: 本文章中所有内容仅供学习交流使用,不用于其他任何目的,不提供完整代码,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关!wx a15018…

【PCL】(二十一)圆柱体模型分割点云

&#xff08;二十一&#xff09;圆柱体模型分割点云 以下代码实现使用平面和圆柱形模型对点云进行采样一致性分割。 cylinder_segmentation.cpp #include <pcl/ModelCoefficients.h> #include <pcl/io/pcd_io.h> #include <pcl/point_types.h> #include &…

MySQL 篇-深入了解多表设计、多表查询

&#x1f525;博客主页&#xff1a; 【小扳_-CSDN博客】 ❤感谢大家点赞&#x1f44d;收藏⭐评论✍ 文章目录 1.0 多表设计概述 1.1 多表设计 - 一对多 1.2 多表设计 - 一对一 1.3 多表设计 - 多对多 2.0 多表查询概述 2.1 多表查询 - 内连接 2.2 多表查询 - 外连接 2.3 多表查…

简明 esp32刷mincopython thonny教程

1.下载thoony 编辑程序 (thoony是个micopython的编辑器,方便烧录上传) https://thonny.org/ 2.安装esptool(自己配置个esptoool环境,因为有时需要精细操作,thoony使用的也是esptool烧录) https://docs.espressif.com/projects/esptool/en/latest/esp32/installation.html 测试运…

云计算OpenStack KVM迁移

动态迁移 static migration 静态迁移 cold migration 冷迁移 offline migration 离线迁移 live migration 动态迁移 hot migration 热迁移 online migration 在线迁移 衡量 整体迁移时间 服务器停机时间 性能影响(迁移后和其它客户机) 特点 负载均衡 解除硬件依赖…