-
第十二章 分布式缓存面试题+SpringCache解决方案
第1集 【面试题】分布式缓存必考题之缓存击穿+解决方案
简介:分布式缓存必考题之缓存击穿+解决方案
-
缓存击穿 (某个热点key缓存失效了)
- 缓存中没有但数据库中有的数据,假如是热点数据,那key在缓存过期的一刻,同时有大量的请求,这些请求都会击穿到DB,造成瞬时DB请求量大、压力增大。
- 和缓存雪崩的区别在于这里针对某一key缓存,后者则是很多key。
-
预防
- 设置热点数据不过期
- 定时任务定时更新缓存
- 设置互斥锁
-
SpringCache解决方案
- 缓存的同步 sync
- sync 可以指示底层将缓存锁住,使只有一个线程可以进入计算,而其他线程堵塞,直到返回结果更新到缓存中
@Cacheable(value = {"product"},key = "#root.args[0]", cacheManager = "customCacheManager", sync=true)
第2集 【面试题】分布式缓存必考题之缓存雪崩+解决方案
简介:分布式缓存必考题之缓存雪崩+解决方案
-
缓存雪崩 (多个热点key都过期)
-
大量的key设置了相同的过期时间,导致在缓存在同一时刻全部失效,造成瞬时DB请求量大、压力骤增,引起雪崩
-
预防
- 存数据的过期时间设置随机,防止同一时间大量数据过期现象发生
- 设置热点数据永远不过期,定时任务定时更新
-
SpringCache解决方案
- 设置差别的过时时间
- 比如CacheManager配置多个过期时间维度
- 配置文件 time-to-live 配置
cache:
#使用的缓存类型
type: redis
#过时时间
redis:
time-to-live: 3600000
# 开启前缀,默以为true
use-key-prefix: true
# 键的前缀,默认就是缓存名cacheNames
key-prefix: XD_CACHE
# 是否缓存空结果,防止缓存穿透,默以为true
cache-null-values: true
-
第3集 【面试题】分布式缓存必考题之缓存穿透+解决方案
简介:分布式缓存必考题之缓存穿透+解决方案
-
缓存穿透(查询不存在数据)
-
查询一个不存在的数据,由于缓存是不命中的,并且出于容错考虑,如发起为id为“-1”不存在的数据
-
如果从存储层查不到数据则不写入缓存这将导致这个不存在的数据每次请求都要到存储层去查询,失去了缓存的意义。存在大量查询不存在的数据,可能DB就挂掉了,这也是黑客利用不存在的key频繁攻击应用的一种方式。
-
预防
- 接口层增加校验,数据合理性校验
- 缓存取不到的数据,在数据库中也没有取到,这时也可以将key-value对写为key-null,设置短点的过期时间,防止同个key被一直攻击
-
SpringCache解决方案
- 空结果也缓存,默认不配置condition或者unless就行
cache:
#使用的缓存类型
type: redis
#过时时间
redis:
time-to-live: 3600000
# 开启前缀,默以为true
use-key-prefix: true
# 键的前缀,默认就是缓存名cacheNames
key-prefix: XD_CACHE
# 是否缓存空结果,防止缓存穿透,默以为true
cache-null-values: true
-
第4集 SpringCache整合SpringBoot案例总结
简介:SpringCache整合SpringBoot案例总结
-
学会触类旁通,举一反三
-
企业中使用也是这样用的,根据项目和团队开发规范简单调整
-
给大家看一个案例代理:大课项目训练营中使用
-
工业级PaaS云平台+SpringCloudAlibaba 综合项目实战
-
-
基于2核4g,阿里云ECS通用性服务器
- 使用缓存前,单机qps 是4千
- 使用分布式缓存3万
- 使用分布式缓存+本地缓存 5万 单机
- 高并发下-容器编排自动化扩容,只要有足够的服务器,可以无限扩容
- 阿里、腾讯、百度、京东、美团、字节等,都是这样的流程, 应对海量请求
-
- 来源:https://www.cnblogs.com/Xd17324217006/p/14948766.html
最新更新
python爬虫及其可视化
使用python爬取豆瓣电影短评评论内容
nodejs爬虫
Python正则表达式完全指南
爬取豆瓣Top250图书数据
shp 地图文件批量添加字段
爬虫小试牛刀(爬取学校通知公告)
【python基础】函数-初识函数
【python基础】函数-返回值
HTTP请求:requests模块基础使用必知必会
SQL SERVER中递归
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
uniapp/H5 获取手机桌面壁纸 (静态壁纸)
[前端] DNS解析与优化
为什么在js中需要添加addEventListener()?
JS模块化系统
js通过Object.defineProperty() 定义和控制对象
这是目前我见过最好的跨域解决方案!
减少回流与重绘
减少回流与重绘
如何使用KrpanoToolJS在浏览器切图
performance.now() 与 Date.now() 对比