Mysql 之 缓存更新策略
缓存的更新策略:(主要解决数据不一致问题)
(一):先更新数据库,再更新缓存(一般不建议使用)
业务角度,对于读操作很少的,造成性能浪费;
线程安全角度,容易产生数据脏读(线程A更新了数据库,线程B更新了数据库,B更新了缓存,A更新了缓存);
(二):先删除缓存,再更新数据库
错误情况:
请求A进行写操作,删除缓存
请求B查询发现缓存不存在,读取数据库,写入缓存
请求A将数据写入数据库
解决方法:
采用延时双删除法(在A写入数据库后,等待一段时间,再删除一次缓存)
等待时间设置:如果读写同步,那么时间为读数据业务逻辑的耗时+几百毫秒;如果读写分离,主从同步的延时+几百毫秒
吞吐量降低解决方法:
第二次删除用异步删除法,开一个线程,异步删除。
第二次删除失败:
尝试重新删除,具体使用消息队列
(三):先更新数据库,再删除缓存(大公司都采用这种方法)
错误情况:
缓存失效,请求A查询数据库
请求B写入数据库,请求B删除缓存
请求A将查到的值写入缓存
只有当读操作比写操作慢时,请求A才会最后写入缓存
解决并发:
异步延时删除策略
删除失败导致不一致:
重试机制:使用消息队列,嵌套到业务代码中(不好);使用订阅程序去订阅数据库的binlog,另起一个程序处理缓存删除。MySQL订阅程序插件:canal
Mysql 之 缓存更新策略相关推荐
- 掌握分布式环境缓存更新策略,提高缓存与数据库双写一致性!
概述 随着时代的发展,服务系统架构也已经由最初的单体架构转变为分布式.微服务架构模式. 从数据体量上来看,各系统存储的数据量越来越大,数据的查询性能越来越低. 此时,就需要我们不断的进行优化,最常用的 ...
- 【Redis】缓存更新策略
1. 缓存更新策略综述 内存淘汰 不用自己维护,利用 Redis 自己的内存淘汰机制 (内存不足时,触发策略,默认开启,可自己配置),其可在一定程度上保持数据一致性 超时剔除 给数据添加 TTL,到期 ...
- Redis的缓存更新策略
文章目录 1.redis的缓存更新的三种策略 1.1 内存淘汰 1.2 超时剔除 1.3 主动更新 2. 缓存更新策略的最佳实践方案: 缓存的更新是redis为了节约内存而设计出来的东西,主要是因为内 ...
- Redis:缓存一致性问题(缓存更新策略)
Redis缓存的一致性 1. 缓存 1.1 缓存的作用: 1.2 缓存的成本: 2. 缓存模型 3. 缓存一致性问题 3.1 引入 3.2 解决 (1) 主动更新:先更新数据库,再手动删除缓存 (2) ...
- 缓存更新策略概览(Caching Strategies Overview)
缓存是一种用于更快数据检索的数据存储技术.从某种意义上说,它比从其主存储(如数据库)获取数据更快.为了实现这一点,我们通常缓存频繁请求或计算的数据.现在,让我们仔细看看可能需要考虑的不同缓存策略.请记 ...
- 为什么你的缓存更新策略是先更新数据库后删除缓存,讲讲其他的情况有什么问题?...
2019独角兽企业重金招聘Python工程师标准>>> 问题:怎么保持缓存与数据库一致? 要解答这个问题,我们首先来看不一致的几种情况.我将不一致分为三种情况 数据库有数据,缓存没有 ...
- 缓存服务的更新策略有哪些?
原文 在互联网项目开发中,缓存的应用是非常普遍了,缓存可以帮助页面提高加载速度,减少服务器或数据源的负载. 1.为什么需要缓存? 一般在项目中,最消耗性能的地方就是后端服务的数据库了.而数据库的读写频 ...
- 【Redis学习03】redis缓存及其更新策略
文章目录 1. 什么是缓存 2. 添加redis缓存 2.1 缓存商铺信息 3. 缓存更新策略 3.1 缓存更新策略方法 3.2 主动更新策略 3.3 缓存更新策略总结 4. 对商铺查询的缓存添加超时 ...
- mysql springboot 缓存_Spring Boot 整合 Redis 实现缓存操作
摘要: 原创出处 www.bysocket.com 「泥瓦匠BYSocket 」欢迎转载,保留摘要,谢谢! 『 产品没有价值,开发团队再优秀也无济于事 – <启示录> 』 本文提纲 一.缓 ...
- Redis-缓存更新策略
Redis三种常见的缓存更新模式介绍 Redis常见的缓存更新策略有三种,分别是Cache Aside Pattern(旁路缓存模式).Read/Write Through Pattern(读写穿透模 ...
最新文章
- 我是主考官:两次弃用的变态笔试题
- Django:模型model和数据库mysql(一)
- 往自身页面提交和别处页面提交到本页的设计小技巧
- Device eth0 does not seem to be present, delaying initialization.转载
- abd shell关闭所有程序_在后台服务器上运行程序
- $router VS $route
- Dajngo-Xadmin 修改菜单摆放排序
- 别再双塔了!谷歌提出DSI索引,检索效果吊打双塔,零样本超BM25!
- c语言入门经典18个程序
- 做一个程序员,是不是“努力就会成功”?现实残酷但又必须面对!
- centos7上安装phpcms
- 12f的接线 esp8266_ESP8266固件升级方法(ESP8266-12F模组)
- batchplot放到哪个文件夹_Batchplot(CAD批量打印工具)下载
- 百度校园招聘笔试题(扫描版)
- ffmpeg一些基本用法
- 区块链学习6:Mist合约部署与删除
- python全局变量(模块法和global)
- 前端从一只小白到工作半年的心路历程
- 朋友圈终于能斗表情包了,会发表情包您就多发点!
- Matlab:常见涡旋光束仿真
热门文章
- ffmpeg命令下载m3u8原画质视频
- 小卡与质数2全网最简单思路 看不懂你来打我
- 仿bing搜索页面制作(大概)
- cefsharp启动优化
- 分布式计算 lab2 Java RMI
- java作业中数据分析与设计_Java课程设计——博客作业教学数据分析系统(201521123091 李嘉廉)...
- try except Exception as e 检查异常
- kpi绩效考核流程图_一种数字化KPI绩效考核方法和装置与流程
- Windows下DVWA靶场和SQL-libs靶场搭建
- vue.js转换乘html_Vue.js的声明式共享元素转换