首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
SAAS
ToB门户
了解全球最新的ToB事件
论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
微博
Follow
记录
Doing
博客
Blog
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
排行榜
Ranklist
相册
Album
应用中心
qidao123.com ToB IT社区-企服评测·应用市场
»
论坛
›
数据库
›
Oracle
›
深入Redis:焦点的缓存
返回列表
发新帖
深入Redis:焦点的缓存
[复制链接]
发表于 2026-1-24 15:12:14
|
显示全部楼层
|
阅读模式
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要
登录
才可以下载或查看,没有账号?
立即注册
×
Redis最紧张的用途,紧张有三个方面:
存储
数据、缓存、消息队列。
此中,缓存是Redis最常用的场景。Redis使用内存作为硬盘的缓存。把用户会合访问的20%数据放到缓存中去,可以应对80%的哀求。
数据库
黑白常紧张的组件,但是mysql的速率又比力慢,以是我们用Redis来作为mysql的缓存。
为什么说关系型
数据库
性能
不高?
数据库
把数据
存储
在硬盘上,硬盘的IO速率并不快。尤其是随机访问。
如果查询不能掷中索引,就须要举行表的遍历,这就会大大增长硬盘IO次数。
关系型数据库对于SQL的实行会做一系列的剖析,校验,优化工作。
如果是一些复杂查询,好比团结查询,须要举行笛卡尔积利用,服从更是低沉许多。
对于mysql来说,
服务器
每处理惩罚一个哀求,都要斲丧一些硬件资源,恣意一种资源的斲丧凌驾了呆板提供的
性能
上线,呆板就很容易出故障。引入缓存就可以大概把大量查询的利用放到内存中去,又快又不消读写硬盘,资源斲丧就少了。
更新战略
定期天生
Redis会把访问的数据,以
日志
的情势纪录下来,好比搜刮引擎中的“查询词”就是访问的数据。通过统计这些词出现的频率,取出前20%的词,这些词就可以以为是“热门词”。这些热门词就可以拿出来放到Redis中作为缓存。
及时天生
如果在Redis中查到了,就直接返回;如果Redis中不存在,就从数据库查,把查到的效果同时也写入Redis。
如许颠末一段时间的“动态平衡”,redis中的key就渐渐都成为了热门数据了。
但是这种方式会让redis中的内存越占越多,直到到达上限。为相识决这种题目,Redis就引入了“内存镌汰战略”。
Redis 提供了多种内存镌汰战略,可以在设置文件中设置 maxmemory-policy 设置项来指定使用哪种战略。以下是 Redis 支持的内存镌汰战略:
noeviction
: 不镌汰任何数据,当内存使用到达限定时,全部写入利用(包罗写入下令和有写入副作用的下令,如 DEL 和 EXPIRE)都会返回错误。
allkeys-lru
: 从全部键中挑选迩来最少使用的键镌汰。
volatile-lru
: 从设置了逾期时间的键中挑选迩来最少使用的键镌汰。
allkeys-random
: 从全部键中随机挑选键镌汰。
volatile-random
: 从设置了逾期时间的键中随机挑选键镌汰。
volatile-ttl
: 从设置了逾期时间的键中挑选将要逾期的键镌汰。
stable
: 从全部键中挑选“近似”最少使用的键镌汰。
volatile-lfu
: 从设置了逾期时间的键中挑选使用频率最低的键镌汰。
allkeys-lfu
: 从全部键中挑选使用频率最低的键镌汰
缓存预热
缓存预热(Cache preheating),是针对于缓存及时天生的情况。
Redis
服务器
初次接入之后,
服务器
内里是没有数据的。此时全部的哀求都会发给mysql,短时间内mysql的压力很大,一段时间之后redis上的数据才会渐渐多起来,mysql的压力才会下去。
缓存预热就是用来办理上述题目的,通过把定期天生和及时天生联合一下,先通过离线的方式,通过一些统计的途径,先把热门数据找到一批,导入到redis中,此时导入这些的这批热门数据就可以大概帮mysql负担很大的压力了。随着时间的推移就可以大概使用新的热门数据镌汰掉旧的数据。
缓存穿透
查询的某个key,在redis中没有,mysql中也没有,这个key肯定也不会被更新到redis中。反复查询都没有,但是会给mysql带来很大的压力。
业务计划不公道,好比缺少须要的参数校验环节,导致非法的key被反复查询
开发、运维误利用,把某个key从数据库上删除了
黑客恶意攻击
办理办法:
如果发现某个key在redis和mysql都不存在,仍然把这个值写入到redis中,value设成一个非法的值,如 " "
引入布隆过滤器,每次查询redis/mysql之前都先判定一下key是否在布隆过滤器上
缓存血崩
在短时间内,redis上大规模的key失效,导致缓存掷中率陡然降落,而且mysql的压力灵敏上升,以致直接宕机。
redis大量节点宕机
之前同时设置的key,逾期时间是雷同的
可以思量给redis设置逾期时间的时间,添加一些随机的因子,制止同一时候逾期。
缓存击穿
相当于缓存血崩的特别情况,针对热门key,忽然逾期了,导致大量的哀求直接访问到数据库上,以致引起数据库宕机。
办理办法:
基于统计的方式发现热门key,而且设置永不外期
举行须要的服务降级,比方访问数据库的时间使用分布式锁,体现同时哀求数据库的并发数
回复
使用道具
举报
返回列表
浏览过的版块
DevOps与敏捷开发
分布式数据库
Java
天津储鑫盛钢材现货供应商
+ 我要发帖
登录后关闭弹窗
登录参与点评抽奖 加入IT实名职场社区
去登录
微信订阅号
微信服务号
微信客服(加群)
H5
小程序
快速回复
返回顶部
返回列表