redis,缓存雪崩,粗粒度锁,缓存一致性
1,
redis单线程为什么快 io多路复用技术 单线程避免多线程的频繁切换问题
memcache缺点 kv形式数据 没有持久化
mongodb 海量数据的访问效率 mr的计算模型
文档就是类似json的键值对形式的数据
写操作MongoDB比传统数据库快的根本原因是Mongo使用的内存映射技术 - 写入数据时候只要在内存里完成就可以返回给应用程序,这样并发量自然就很高。而保存到硬体的操作则在后台异步完成
读操作MongoDB快的原因是: 1)MongoDB的设计要求你常用的数据(working set)可以在内存里装下。这样大部分操作只需要读内存,自然很快。 2)文档性模式设计一般会是的你所需要的数据都相对集中在一起
2,
缓存不仅快 其次减少数据库压力 数据库连接资源有限
缓存雪崩:一系列的key,过期时间一样,缓存到时了,请求都到数据库了
缓存穿透:访问key 缓存中没有值,数据库崩了,可以将null写入缓存,时效快
缓存击穿:一个key时效,同时访问这个key的请求很多,不过期
3、粗粒度锁:
这时候,普遍的做法是加锁,但是如果对整个访问redis的动作加锁,那么等于多个线程串行访问了!
4、细粒度加锁:
我们这里的做法是对key(redis)进行细粒度加锁,每个key拥有一把锁,只对key进行并发控制,key与key之间允许并发。
5、缓存一致性
5.1.实时同步更新
特点:更新数据库的同时,更新缓存,使用缓存工具类或者AOP实现
优点:数据一致性强,不会出现缓存雪崩
缺点:代码耦合,运行期耦合,影响正常业务,增加一次网络开销
适用场景:写操作频繁、数据一致性要求比较高,比如银行业务、证券业务
5.2.准实时同步更新
特点:更新数据库后,异步更新缓存,使用使用mq实现或者binglog同步
优点:数据一致性较强、有较短的延迟,与业务代码解耦,不会影响正常业务,不会出现缓存雪崩
缺点:有较短延迟,无法保证最终一致性,需要补偿机制
试用场景:不适合写操作频繁且数据一致性要求严格的场景
5.3.缓存失效机制
特点:基于缓存自身的失效机制,弱一致性
优点:实现简单,与业务完全解耦,不影响正常业务
缺点:有一定延迟,存在缓存雪崩问题
试用场景:适合读多写少的互联网场景,允许一定数据延迟
5.4.任务调度更新
特点:采用任务调度框架,按照一定频率更新
优点:不影响正常业务,与业务解耦
缺点:不保证一致性,代码复杂度增大(要维护两套代码),容易堆积垃圾数据
试用场景:复杂统计类数据缓存,对数据一致性要求低的场景,比如统计类数据、BI分析
redis,缓存雪崩,粗粒度锁,缓存一致性的更多相关文章
- MC的缓存雪崩现象和缓存无底洞的原因以及导致的后果的总结
缓存雪崩一般是由某个缓存节点失效,导致其他节点的缓存命中率下降,缓存中确实的数据去数据库查询,短时间内,造成数据库服务器的崩溃. 这时,我们需要重启数据库,但重启一段时间后,又会被压垮,但此时缓存的数 ...
- 第三节:Redis缓存雪崩、击穿、穿透、双写一致性、并发竞争、热点key重建优化、BigKey的优化 等解决方案
一. 缓存雪崩 1. 含义 同一时刻,大量的缓存同时过期失效. 2. 产生原因和后果 (1). 原因:由于开发人员经验不足或失误,大量热点缓存设置了统一的过期时间. (2). 产生后果:恰逢秒杀高峰, ...
- Redis缓存穿透和缓存雪崩以及解决方案
Redis缓存穿透和缓存雪崩以及解决方案 Redis缓存穿透和缓存雪崩以及解决方案缓存穿透解决方案布隆过滤缓存空对象比较缓存雪崩解决方案保证缓存层服务高可用性依赖隔离组件为后端限流并降级数据预热缓存并 ...
- 缓存与数据库一致性之三:缓存穿透、缓存雪崩、key重建方案
一.缓存穿透预防及优化 缓存穿透是指查询一个根本不存在的数据,缓存层和存储层都不会命中,但是出于容错的考虑,如果从存储层查不到数据则不写入缓存层,如图 11-3 所示整个过程分为如下 3 步: 缓存层 ...
- 实例解读什么是Redis缓存穿透、缓存雪崩和缓存击穿
from:https://baijiahao.baidu.com/s?id=1619572269435584821&wfr=spider&for=pc Redis缓存的使用,极大的提升 ...
- Redis缓存击穿、缓存穿透、缓存雪崩
文章原创于公众号:程序猿周先森.本平台不定时更新,喜欢我的文章,欢迎关注我的微信公众号. 上篇文章谈到了Redis分布式锁,实际上就是为了解释为什么做缓存采用Redis而不使用map/guava.缓存 ...
- Redis 17 缓存穿透 缓存击穿 缓存雪崩
参考源 https://www.bilibili.com/video/BV1S54y1R7SB?spm_id_from=333.999.0.0 版本 本文章基于 Redis 6.2.6 使用缓存的问题 ...
- Redis总结(五)缓存雪崩和缓存穿透等问题
前面讲过一些redis 缓存的使用和数据持久化.感兴趣的朋友可以看看之前的文章,http://www.cnblogs.com/zhangweizhong/category/771056.html .今 ...
- Redis缓存穿透、缓存雪崩和缓存击穿理解
1.缓存穿透(不存在的商品访问数据造成压力) 缓存穿透,是指查询一个数据库一定不存在的数据.正常的使用缓存流程大致是,数据查询先进行缓存查询,如果key不存在或者key已经过期,再对数据库进行查询,并 ...
- redis缓存雪崩、缓存穿透、数据库和redis数据一致性
一.缓存雪崩 回顾一下我们为什么要用缓存(Redis):减轻数据库压力或尽可能少的访问数据库. 在前面学习我们都知道Redis不可能把所有的数据都缓存起来(内存昂贵且有限),所以Redis需要对数据设 ...
随机推荐
- SpringBoot2.0微信小程序支付多次回调问题
SpringBoot2.0微信小程序支付多次回调问题 WxJava - 微信开发 Java SDK(开发工具包); 支持包括微信支付.开放平台.公众号.企业微信/企业号.小程序等微信功能的后端开发. ...
- CAS 单点登录【2】自定义用户验证
基础不太熟的同学可以先去看:CAS 单点登录[1]入门 方案1:CAS默认的JDBC扩展方案: CAS自带了两种简单的通过JDBC方式验证用户的处理器. 1.QueryDatabaseAuthe ...
- 每天一个linux命令:find
1.命令简介 find(find) 命令用来在指定目录下查找文件.任何位于参数之前的字符串都将被视为欲查找的目录名.如果使用该命令时,不设置任何参数,则find命令将在当前目录下查找子 ...
- JavaScript 同步异步示意图
- 使用rsync
rsync是linux下同步文件的一个高效算法,用于同步更新两处计算机的文件和目录,并适当利用查找文件中的不同块以减少数据传输.rsync的主要特点就是增量传输,只对变更的部分进行传送. 增量同步算法 ...
- 开发app前需要提前准备的资料
需要准备的资料整理如下: 1 域名未注册,建议在 阿里云注册:https://www.aliyun.com/,2 服务器https://ecs-buy.aliyun.com/配置:计费方式:包年包月地 ...
- python 奇偶拆分list,python拆分list,得到一个原来list的奇数list,一个原来list的偶数list
需求:现在有一个list ,range_data = ['m', 'M', 'h', 'c', 'X', 'Z', 'A', 'o'] 希望得到两个list, 一个是奇数list =['m', 'h ...
- NetCore指令集和
1.查看当前目录的版本号 C:\Users\Administrator>dotnet --version 1.0.4 2.发布程式,进入到指定目录 dotnet publish 3.运行程式 # ...
- ubuntu上Android开发环境及依赖项
[时间:2018-07] [状态:Open] [关键词:ubuntu,系统安装,开发环境搭建,android,工具集] Ubuntu系统版本:v18.04 LTS c/c++ dev (build-e ...
- windows安装centos7子系统
Windows的Linux子系统(wsl ) 自从有了wsl后,基本上虚拟机都省了,对于离不开Windows的便捷,Linux对开发的友好的人来说,真是一大利器.可惜默认的系统没有centos,幸运的 ...