深圳模板网站,青岛百度网站排名,网站开发职业技能简历,湛江做网站报价目录 
一、三种删除策略比较 
二、缓存雪崩缓存击穿缓存穿透 
三、缓存一致性 Redis学习笔记 
一、三种删除策略比较 
内存占用CPU占用特征定时删除节约内存#xff0c;无占用不分时段占用CPU资源#xff0c;频度高时间换空间惰性删除内存占用严重延时执行#xff0c;CPU利用…目录 
一、三种删除策略比较 
二、缓存雪崩缓存击穿缓存穿透 
三、缓存一致性 Redis学习笔记 
一、三种删除策略比较 
内存占用CPU占用特征定时删除节约内存无占用不分时段占用CPU资源频度高时间换空间惰性删除内存占用严重延时执行CPU利用率高空间换时间定期删除内存定期随机清理每秒花费固定的CPU资源维护内存随机抽查重点抽查 
1.定时删除创建一个定时器当key过期时定时器立即删除过期数据。这样做节约内存但是cpu负荷高由于redis时单线程的在访问量大时甚至会引起线程阻塞。 
2.惰性删除 数据到达过期时间不做处理。等下次访问该数据时如果未过期返回数据。如果已过期删除返回不存在。这样CPU压力会降低但是内存压力很大长期有过期数据占用内存。 
3.定期删除这种策略平衡了前两种极端的方案Redis启动服务器初始化时读取配置server.hz的值默认为10.每秒执行server.hz次的serverCron()中的方法周期性的轮询redis库中的时效型数据采用随机抽取的策略利用过期数据占比的方式控制删除频度过期数据的比例不超过25%。 
定期删除的优点在于CPU性能占用设置有峰值检测频度可自定义内存压力和CPU压力都不大。但是仅仅是通过给key设置时长还是有问题的因为还是有很多过期key堆积在内存中容易引起Out Of Memory。那么如何解决这方面的问题呢就是Redis的内存淘汰机制逐出算法。 
Redis使用内存存储数据在执行没一个命令前会调用FreeMemoryIFNeeded检查内存是否充足如果内存不满足新加入数据的最低存储要求redis要删除一些数据为清理空间。清理的策略被称为逐出算法 
Redis目前有8种逐出策略 
1.volatile-lru从已设置过期时间的数据中挑选最近最少使用的数据淘汰。针对时间 
2.volatile-lfu从已设置过期时间的数据中挑选最近使用次数最少的数据淘汰。针对访问频率 
3.volatile-ttl从已设置过期时间的数据中挑选快要过期的数据。 
4.volatile-random从已设置过期时间的数据中任意选择数据淘汰。 
5.allkeys-lru在所有的key中移除最近最少使用的key。 
6.allkeys-lfu:在所有的key中移除最近使用次数最少的key。 
7.allkeys-random任意挑选数据淘汰。 
8.no-eviction禁止驱逐数据Redis4.0默认策略。 
需要注意的时逐出过程并不是100%的能够清理出足够的空间如果不成功反复执行在所有数据都尝试完毕后如果还是不能满足内存清理的要求将会出现错误信息。 
(error) OOM command not allowed when used memory maxmemory 二、缓存雪崩缓存击穿缓存穿透 
缓存预热在系统启动前提交将相关的缓存数据直接加载到缓存系统避免在用户请求的时候先查数据库然后再缓存数据的问题 
缓存雪崩大面积key同一时间失效所有请求直接落在数据库上造成数据库压力过大可能导致服务器宕机。 
解决方案1.更多的页面静态化处理 2.构造多级缓存 3.灾难预警机制 4.限流降级短时间牺牲客户体验限制一部分请求降低服务器压力待业务低速运转后再逐步放开 5.删除策略进行切换lru-lfu 6.数据分类有效期策略调整稀释集中到期的key的数量 7.超热数据 永久key 
缓存击穿某个热点key过期大量请求落在服务器。 
解决方案1.二级缓存 2.设置永久key 3.延长过期时间待访问量降低后移除 
缓存穿透redis出现大面积未命中请求的key不在redis中直接落在服务器 解决方案1.布隆过滤器 2.缓存null 3.做好参数校验 4.实时监控redis的命中率 5.key加密不满足直接驳回 
三、缓存一致性 缓存数据同步的常见方式有三种 
设置有效期给缓存设置有效期到期后自动删除。再次查询时更新 优势简单、方便缺点时效性差缓存过期之前可能不一致场景更新频率较低时效性要求低的业务延时双删在修改数据库的同时直接修改缓存 优势时效性强缓存与数据库强一致缺点有代码侵入耦合度高场景对一致性、时效性要求较高的缓存数据异步通知MQ或监听bin log修改数据库时发送事件通知相关服务监听到通知后修改缓存数据 优势低耦合可以同时通知多个缓存服务缺点时效性一般可能存在中间不一致状态场景时效性要求一般有多个服务需要同步