黑龙江省建设教育网站查询小企业网站建设计划书
news/
2025/10/8 22:06:08/
文章来源:
黑龙江省建设教育网站查询,小企业网站建设计划书,seo关键词挖掘工具,网站规划的基本步骤目录
1、什么是缓存
2、为什么使用Redis作为MySQL的缓存
3、缓存的更新策略
3.1、策略一#xff1a;定期生成
3.2、策略二#xff1a;实时生成
内存淘汰策略【面试重点】
4、缓存预热(Cache preheating)【面试重点】
5、缓存穿透(Cache penetration)【面试重点】
6、…目录
1、什么是缓存
2、为什么使用Redis作为MySQL的缓存
3、缓存的更新策略
3.1、策略一定期生成
3.2、策略二实时生成
内存淘汰策略【面试重点】
4、缓存预热(Cache preheating)【面试重点】
5、缓存穿透(Cache penetration)【面试重点】
6、缓存雪崩(Cache avalanche)【面试重点】
7、缓存击穿(Cache breakdown)【面试重点】 1、什么是缓存 缓存其实核心实现的就是能够更快访问到数据~ 更快既然是一个比较级的关系那么就是会有一个相对关系谁对谁来说更快谁对谁来说访问速度更快是谁谁的缓存。 举例理解你把钱存在银行每次买东西之前你需要去银行取钱然后再来付款这个过程就会比较麻烦这种情况下你可以取一小部分钱放在口袋里每次买东西付款时直接从口袋里取钱这个过程就会相对来说更加高效了。此时口袋相对银行来说访问速度更快就可以使用口袋作为银行的缓存大大提高办事效率~ 那么对于计算机来说硬盘相对于网络来说访问速度更快就可以使用硬盘作为网络的缓存内存相对于硬盘来说访问速度更快就可以使用内存作为硬盘的缓存CPU寄存器相对于内存来说访问速度更快就可以使用CPU寄存器作为内存的缓存。 那上述所说的缓存是更快了但并不意味着可以把所有数据都放在缓存中因为缓存的空间往往是有限的缓存上只放一些热点数据就可以了~【二八定律】 2、为什么使用Redis作为MySQL的缓存 Redis典型的应用场景就三个存储数据 、 缓存【最常见】 、 消息队列。 下面就简单介绍一下为什么使用Redis作为MySQL的缓存 1MySQL·(关系型数据库)虽然功能强大但是其性能并不高每一次查询操作消耗的系统资源比较多。性能不高其承担的并发量就有限一旦请求数据量多了数据库的压力就会很大甚至很容易宕机了~ 2关系型数据库为什么性能不高数据库把数据存储在硬盘上硬盘的IO速度并不快尤其是随机访问如果查询不能命中索引就需要进行表的遍历这就会大大增加硬盘IO次数关系型数据库对于SQL的执行会做一系列的解析校验优化工作如果是是一些复杂的查询比如联合查询需要进行笛卡尔积操作效率更是降低很多~ 3提高MySQL能承担的并发量开源-引入更多的机器构成数据库集群节流-引入缓存把一系列的热点数据保存在缓存上后续查询数据时如果缓存中已经存在就不用再访问MMySQL了~ 那我们如何知道Redis中应该存储哪些数据呢怎么判定他是热点数据呢具体看我们下面介绍的缓存的更新策略~ 3、缓存的更新策略
3.1、策略一定期生成 将一定时间内访问的数据以日志的形式记录下来对于其访问的数据频次进行统计挑选出访问频次最高的前N%的数据定期将这些数据同步到缓存服务器上控制这些缓存服务器自动重启~ 通常情况下会有一个脚本代码来执行这个操作通过定时任务来触发:
完成统计热数据过程根据热数据找到其查询结果的数据将这些缓存数据同步至缓存服务器上控制这些缓存服务器自动重启~ 优点 上述方式在实际实现会比较简单过程更加可控(缓存中有啥数据是比较固定)方便排查问题~ 缺点 实时性不够如果有突发事件的相关数据变成热数据了但由于数据还没有同步到缓存服务器中就会给数据库带来较大的压力~
3.2、策略二实时生成 实时生成其过程就是
如果Redis中查到了就返回其结果如果Redis中不存在就从数据中查把查询结果同时也写到Redis中~ 但是这种方式也会带来一个问题Redis中不存在的数据很多每次查都往里新增数据不停地增加后内存可能会达到上限此时再插入数据可能就会触发一些问题。此时Redis就引入了“内存淘策略”如下 内存淘汰策略【面试重点】 通用的淘汰策略
FIFO(First In First Out)先进先出把缓存中存在时间最久的淘汰掉----按进入Redis的时间按序时间越老越先淘汰LRU(Least Recently Used)淘汰最久未使用的记录每个key的最近访问时间把最近访问时间最老的key淘汰---按最近访问时间排序时间越老越先淘汰LFU(Least Frequently Used)淘汰访问次数最少的记录每个key的最近一段时间的访问次数那访问次数最少的淘汰----按某段时间内的访问次数排序次数越少越先淘汰Random随机淘汰在所有的key中随机淘汰~
Redis中的淘汰策略
volatile-lru当内存不足以容纳新写的数据时从设置了过期时间的key中使用LRU算法进行淘汰allkeys-lru当内存不足以容纳新写的数据时从所有的key中使用LRU算法进行淘汰volatile-lfu当内存不足以容纳新写的数据时从设置了过期时间的key中使用LFU算法进行淘汰allkeys-lfu当内存不足以容纳新写的数据时从所有的key中使用LFU算法进行淘汰volatile-random当内存不足以容纳新写的数据时从设置了过期时间的key中随机进行淘汰allkeys-random当内存不足以容纳新写的数据时从所有的key中随机进行淘汰volatile-ttl当内存不足以容纳新写的数据时从设置了过期时间的key中根据过期时间越早过期的优先被淘汰noeviction默认的策略当内存不足以容纳新的数据时新写入的操作会报错~ 上述的Redis淘汰策略其实就是根据通用的策略再结合Redis的特点【可以设置过期时间】来进行淘汰数据~ 4、缓存预热(Cache preheating)【面试重点】 对于缓存中的数据如果采用实时生成的策略就需要考虑到预热问题。 因为在最开始Redis服务器首次连接其中还没有数据那所有的请求就会被打给MySQL了随着时间的推移Redis上的数据越积累越多MySQL承担的压力才会逐渐减小~ 如何解决上述问题 使用缓存预热。具体来说就是把定期生成和实时生成结合一下先通过离线的方式通过一些统计的途径先把热数据找到一批导入到Redis中此时这些导入的热点数据就能帮MySQL承担很大的压力了随着时间的推移逐渐就使用新的热点数据淘汰掉旧的数据~ 5、缓存穿透(Cache penetration)【面试重点】 什么是缓存穿透? 当在查询某个key时Redis中没有该数据然后去MySQL中查询MySQL里面也没有这个值那这个key肯定就也不会被更新到Redis中那后续再查这个key依然没有这个数据。像这种的数据如果存在很多并且还一直被反复查询一样也会给MySQL带来很大的压力~ 为什么会出现这种情况 业务设计不合理。例如缺少了参数校验的环节导致非法的key也能够被查询了开发/运维操作失误不小心把部分数据从数据库中误删了黑客恶意攻击 如何解决问题 如果出现过这种情况我们在以后的工作中就会得到教训要改进业务、加强监控报警系统等~ 那这些都是以后的工作中得到的教训话说回来那当你正发现这个问题了你应当如何降低问题的严重性呢如下
1如果发现了这个key在Redis和MySQL上都不存在仍然将这个key写入到Redis中value设成一个非法值例如 “”2还可以引入布隆过滤器每次查询Redis或MySQL之前都先判定一下key是否在 布隆过滤器上 存在~ 所有的key都插入到布隆过滤器中 6、缓存雪崩(Cache avalanche)【面试重点】 什么是缓存雪崩 在短时间内Redis上大规模的key失效导致缓存命中率陡然下降并且MySQL的压力迅速上升甚至直接宕机~ 为什么会出现这种情况 Redis直接挂了【Redis宕机或者是Redis集群模式下的大量节点宕机】Redis正常工作但是可能之前短时间内设置了很多的key并且过期时间都是相同的【通过大规模key过期】 如何解决问题 1加强监控报警系统加强Redis集群可用性的保证2不给key设置过期时间 或者是设置过期时间但是同时会加上一个随机因子避免在同一时刻过期 7、缓存击穿(Cache breakdown)【面试重点】 什么是缓存击穿 缓存击穿也可以叫做是缓存瘫痪~ 就是缓存雪崩的一种特殊情况这对热点的key【热点数据访问频率高影响更大】突然过期了导致大量的请求直接访问在数据库上了甚至引起数据库宕机~ 为什么会出现这种情况 业务设计不合理。例如缺少了参数校验的环节导致非法的key也能够被查询了开发/运维操作失误不小心把部分数据从数据库中误删了黑客恶意攻击 如何解决问题 1进行必要的服务降级。例如访问数据库的时候使用分布式锁限制同时请求数据库的并发数2不给key设置过期时间 或者是设置过期时间但是同时会加上一个随机因子避免在同一时刻过期
好啦本期到这里咯下期见~
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/931991.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!