缓存的更新策略:(主要解决数据不一致问题)

(一):先更新数据库,再更新缓存(一般不建议使用)

业务角度,对于读操作很少的,造成性能浪费;
线程安全角度,容易产生数据脏读(线程A更新了数据库,线程B更新了数据库,B更新了缓存,A更新了缓存);

(二):先删除缓存,再更新数据库

错误情况
请求A进行写操作,删除缓存
请求B查询发现缓存不存在,读取数据库,写入缓存
请求A将数据写入数据库

解决方法
采用延时双删除法(在A写入数据库后,等待一段时间,再删除一次缓存)
等待时间设置:如果读写同步,那么时间为读数据业务逻辑的耗时+几百毫秒;如果读写分离,主从同步的延时+几百毫秒

吞吐量降低解决方法
第二次删除用异步删除法,开一个线程,异步删除。

第二次删除失败:
尝试重新删除,具体使用消息队列

(三):先更新数据库,再删除缓存(大公司都采用这种方法)

错误情况
缓存失效,请求A查询数据库
请求B写入数据库,请求B删除缓存
请求A将查到的值写入缓存

只有当读操作比写操作慢时,请求A才会最后写入缓存

解决并发
异步延时删除策略

删除失败导致不一致:
重试机制:使用消息队列,嵌套到业务代码中(不好);使用订阅程序去订阅数据库的binlog,另起一个程序处理缓存删除。MySQL订阅程序插件:canal

Mysql 之 缓存更新策略相关推荐

  1. 掌握分布式环境缓存更新策略,提高缓存与数据库双写一致性!

    概述 随着时代的发展,服务系统架构也已经由最初的单体架构转变为分布式.微服务架构模式. 从数据体量上来看,各系统存储的数据量越来越大,数据的查询性能越来越低. 此时,就需要我们不断的进行优化,最常用的 ...

  2. 【Redis】缓存更新策略

    1. 缓存更新策略综述 内存淘汰 不用自己维护,利用 Redis 自己的内存淘汰机制 (内存不足时,触发策略,默认开启,可自己配置),其可在一定程度上保持数据一致性 超时剔除 给数据添加 TTL,到期 ...

  3. Redis的缓存更新策略

    文章目录 1.redis的缓存更新的三种策略 1.1 内存淘汰 1.2 超时剔除 1.3 主动更新 2. 缓存更新策略的最佳实践方案: 缓存的更新是redis为了节约内存而设计出来的东西,主要是因为内 ...

  4. Redis:缓存一致性问题(缓存更新策略)

    Redis缓存的一致性 1. 缓存 1.1 缓存的作用: 1.2 缓存的成本: 2. 缓存模型 3. 缓存一致性问题 3.1 引入 3.2 解决 (1) 主动更新:先更新数据库,再手动删除缓存 (2) ...

  5. 缓存更新策略概览(Caching Strategies Overview)

    缓存是一种用于更快数据检索的数据存储技术.从某种意义上说,它比从其主存储(如数据库)获取数据更快.为了实现这一点,我们通常缓存频繁请求或计算的数据.现在,让我们仔细看看可能需要考虑的不同缓存策略.请记 ...

  6. 为什么你的缓存更新策略是先更新数据库后删除缓存,讲讲其他的情况有什么问题?...

    2019独角兽企业重金招聘Python工程师标准>>> 问题:怎么保持缓存与数据库一致? 要解答这个问题,我们首先来看不一致的几种情况.我将不一致分为三种情况 数据库有数据,缓存没有 ...

  7. 缓存服务的更新策略有哪些?

    原文 在互联网项目开发中,缓存的应用是非常普遍了,缓存可以帮助页面提高加载速度,减少服务器或数据源的负载. 1.为什么需要缓存? 一般在项目中,最消耗性能的地方就是后端服务的数据库了.而数据库的读写频 ...

  8. 【Redis学习03】redis缓存及其更新策略

    文章目录 1. 什么是缓存 2. 添加redis缓存 2.1 缓存商铺信息 3. 缓存更新策略 3.1 缓存更新策略方法 3.2 主动更新策略 3.3 缓存更新策略总结 4. 对商铺查询的缓存添加超时 ...

  9. mysql springboot 缓存_Spring Boot 整合 Redis 实现缓存操作

    摘要: 原创出处 www.bysocket.com 「泥瓦匠BYSocket 」欢迎转载,保留摘要,谢谢! 『 产品没有价值,开发团队再优秀也无济于事 – <启示录> 』 本文提纲 一.缓 ...

  10. Redis-缓存更新策略

    Redis三种常见的缓存更新模式介绍 Redis常见的缓存更新策略有三种,分别是Cache Aside Pattern(旁路缓存模式).Read/Write Through Pattern(读写穿透模 ...

最新文章

  1. 我是主考官:两次弃用的变态笔试题
  2. Django:模型model和数据库mysql(一)
  3. 往自身页面提交和别处页面提交到本页的设计小技巧
  4. Device eth0 does not seem to be present, delaying initialization.转载
  5. abd shell关闭所有程序_在后台服务器上运行程序
  6. $router VS $route
  7. Dajngo-Xadmin 修改菜单摆放排序
  8. 别再双塔了!谷歌提出DSI索引,检索效果吊打双塔,零样本超BM25!
  9. c语言入门经典18个程序
  10. 做一个程序员,是不是“努力就会成功”?现实残酷但又必须面对!
  11. centos7上安装phpcms
  12. 12f的接线 esp8266_ESP8266固件升级方法(ESP8266-12F模组)
  13. batchplot放到哪个文件夹_Batchplot(CAD批量打印工具)下载
  14. 百度校园招聘笔试题(扫描版)
  15. ffmpeg一些基本用法
  16. 区块链学习6:Mist合约部署与删除
  17. python全局变量(模块法和global)
  18. 前端从一只小白到工作半年的心路历程
  19. 朋友圈终于能斗表情包了,会发表情包您就多发点!
  20. Matlab:常见涡旋光束仿真

热门文章

  1. ffmpeg命令下载m3u8原画质视频
  2. 小卡与质数2全网最简单思路 看不懂你来打我
  3. 仿bing搜索页面制作(大概)
  4. cefsharp启动优化
  5. 分布式计算 lab2 Java RMI
  6. java作业中数据分析与设计_Java课程设计——博客作业教学数据分析系统(201521123091 李嘉廉)...
  7. try except Exception as e 检查异常
  8. kpi绩效考核流程图_一种数字化KPI绩效考核方法和装置与流程
  9. Windows下DVWA靶场和SQL-libs靶场搭建
  10. vue.js转换乘html_Vue.js的声明式共享元素转换