当前位置: 首页 > news >正文

普通情况和高并发时,Redis缓存和数据库怎么保持一致?

普通情况和高并发时,Redis缓存和数据库怎么保持一致?

  • 普通情况
    • 思路
  • 高并发时
    • 思路

Q:缓存和数据库怎么保持一致?
A:绝对不可能保持一致的,在实际业务开发中,有一些方案可以做取舍。

实际业务中,疑问点主要有:

  1. 是先更新Redis还是先更新Mysql?
  2. 是Redis和Mysql都更新,还是只更新Mysql?
  3. Mysql或Redis其中一个更新失败,该业务要算作失败吗?需要回滚吗?

这是我根据实际业务开发经验,总结的操作方案图: 在这里插入图片描述

普通情况

思路

仅保证数据库是完整有效的数据,有变动后就删除Redis,不一致的结果都属于延迟的情况。但是当数据变动后,都需要访问数据库至少一次来更新到缓存。

新增

  1. Mysql新增数据,失败即失败
  2. Redis无操作

编辑

  1. Mysql修改数据,失败即失败
  2. Redis删除数据,失败即失败

删除

  1. Mysql删除数据,失败即失败
  2. Redis删除数据,失败即失败

获取

  1. 从Redis获取,就有返回
  2. 从Mysql获取,有就更新到Redis,返回

高并发时

思路

需要保证数据库和Mysql是完整有效的数据,有变动时需要同步修改Redis,不一致的结果都属于延迟的情况。当数据变动后,无需访问数据库。

新增

  1. Mysql新增数据,失败即失败
  2. Redis新增数据,失败即失败

编辑

  1. Mysql修改数据,失败即失败
  2. Redis修改数据,失败即失败

删除

  1. Mysql删除数据,失败即失败
  2. Redis删除数据,失败即失败

获取

  1. 从Redis获取,有就返回,无就返回无
http://www.lryc.cn/news/332973.html

相关文章:

  • Django -- 自动化测试
  • NodeJS 在Windows / Mac 上实现多版本控制
  • Web3 游戏周报(3.24-3.30)
  • 算法思想1. 分治法2. 动态规划法3. 贪心算法4. 回溯法
  • SpringBoot+ECharts+Html 地图案例详解
  • 达梦数据库 优化
  • 数据如何才能供得出、流得动、用得好、还安全
  • idea开发 java web 酒店推荐系统bootstrap框架开发协同过滤算法web结构java编程计算机网页
  • Linux——线程控制
  • 【Leetcode 347】,前k个高频元素,小根堆的调整
  • 【图论】【分类讨论】LeetCode3017按距离统计房屋对数目
  • 浅谈Yum 安装和 源码安装
  • JavaEE初阶Day 3:多线程(1)
  • gutil140.dll是什么?gutil140.dll无法继续执行的解决方法
  • 在CentOS 7上安装Python 3.7.7
  • 基于SpringBoot Vue宠物领养系统
  • ip命令
  • 【Kaggle】练习赛《鲍鱼年龄预测》(上)
  • Ruby 之交租阶段信息生成
  • RUST语言值所有权之内存复制与移动
  • 【Django学习笔记(三)】BootStrap介绍
  • ClickHouse开发相关(UDAF)
  • MySql并发事务问题
  • Windows下Docker创建Mysql5.7
  • Redis(性能管理、主从复制、哨兵模式)概述及部署
  • LabVIEW挖坑指南
  • docker容器环境安装记录(MAC M1)(完善中)
  • Linux 常用命令(持续更新中...)
  • xss.pwnfunction-Jefff
  • java——文件上传