美文网首页网页前端后台技巧(CSS+HTML)Web前端之路PHP开发
缓存那些事之缓存更新、失效以及内存淘汰策略

缓存那些事之缓存更新、失效以及内存淘汰策略

作者: X先生说 | 来源:发表于2020-01-16 19:18 被阅读0次

前言

缓存应该是技术人员最常见的一个词了,但是或许不是所有人都能准确的说出缓存本质是什么,又适用于什么情况,可能遇到哪些问题,应该怎么来解决。下面我就分三篇文章来给大家详细介绍下缓存相关的知识。疏漏不足之处,也请指正,不胜感激。

《缓存那些事之初识缓存》
《缓存那些事之缓存更新、失效以及内存淘汰策略》
《缓存那些事之常见问题与解决方案》

缓存更新策略

缓存更新策略是指在数据需要发生变更的时候,如何来更新目标数据和缓存的方法。可别小看缓存更新策略!要是没有使用正确的缓存更新策略,我们缓存中的数据很容易就变脏了,而且还会一直这样脏下去。

具体可以看这两篇文章,介绍得还是很详细和明白的,这里就不赘述了。

《缓存更新的套路》
《缓存使用过程中的五种策略总结及优缺点组合分析》

缓存过期策略

缓存过期策略是指缓存过期后,我们如何来处理这些过期的数据。过期策略通常有以下三种:

定时过期:每个设置过期时间的key都需要创建一个定时器,到过期时间就会立即清除。该策略可以立即清除过期的数据,对内存很友好;但是会占用大量的CPU资源去处理过期的数据,从而影响缓存的响应时间和吞吐量。

惰性过期:只有当访问一个key时,才会判断该key是否已过期,过期则清除。该策略可以最大化地节省CPU资源,却对内存非常不友好。极端情况可能出现大量的过期key没有再次被访问,从而不会被清除,占用大量内存。

定期过期:每隔一定的时间,会扫描一定数量的数据库的expires字典中一定数量的key,并清除其中已过期的key。该策略是前两者的一个折中方案。通过调整定时扫描的时间间隔和每次扫描的限定耗时,可以在不同情况下使得CPU和内存资源达到最优的平衡效果。

内存淘汰策略

内存淘汰策略是指在我们系统内存不足的时候,如何淘汰掉内存里的某些缓存数据,从而为新的缓存数据腾出空间。这里面也有一些不同的策略的,最常见的就是LFU,FIFO,LRU这三种策略。

事实上,如果大家对操作系统的知识有足够了解的话,就会知道这些策略其实就是操作系统里的页面置换算法。事实上我们宏观系统的很多设计都是来源于这些底层的地方。这些设计模式看起来非常的老古董,但是却又都是历经长时间考验的设计,也就是工程学上所谓的Best Practice,所以要做好架构,把计算机体系结构以及很多老古董的基础技术吃透是非常有帮助的。

继续回到我们的内存淘汰策略:

FIFO(First In First out): 先进先出,最先进来的数据先淘汰,和队列一样。
LRU(Least recently used): 最近最少使用算法,也就是根据访问的历史记录来淘汰,把历史记录最远的淘汰掉。其核心思想是“如果一个数据在最近一段时间内使用次数很少,那么在将来一段时间内被使用的可能性也很小”。
LFU(Least frequently used): 最近使用次数最少算法, 淘汰使用次数最少的页面,按照访问次数进行排序,淘汰访问次数最少的,访问次数一样的就按访问时间来。其核心思想是“如果数据过去被访问多次,那么将来被访问的频率也更高”。

当然除了这三种策略外,还有很多改进算法,想了解更多的策略可以看这篇文章 《你与解决“缓存污染”只差这篇文章的距离》

参考资料

《Redis的过期策略和内存淘汰策略》

Enjoy it !

如果觉得文章对你有用,可以赞助我喝杯咖啡~

版权声明

转载请注明作者和文章出处
作者: X先生
首发于 https://www.jianshu.com/p/d6140cc4ad01

相关文章

  • 缓存那些事之缓存更新、失效以及内存淘汰策略

    前言 缓存应该是技术人员最常见的一个词了,但是或许不是所有人都能准确的说出缓存本质是什么,又适用于什么情况,可能遇...

  • PHP面试题 之 redis

    Redis的缓存策略和主键失效机制 作为缓存系统都要定期清理无效数据,就需要一个主键失效和淘汰策略。 在Redis...

  • OkHttp3(十二)--CacheInterceptor

    CacheInterceptor 用来负责读取缓存以及更新缓存的 读取候选缓存 创建缓存策略 根据缓存策略决定报错...

  • [缓存系列] redis那点事

    本文,你将阅读到以下内容: 如何应对缓存击穿和缓存雪崩的问题; Redis 的过期策略以及内存淘汰机制; 1.如何...

  • 缓存那些事(二)什么是缓存以及缓存的作用

    缓存那些事(一)概述 缓存那些事(二)什么是缓存以及缓存的作用 缓存那些事(三)如何构建缓存 缓存那些事(四)缓存...

  • 缓存那些事(三)如何构建缓存

    缓存那些事(一)概述 缓存那些事(二)什么是缓存以及缓存的作用 缓存那些事(三)如何构建缓存 缓存那些事(四)缓存...

  • 缓存那些事(一)概述

    缓存那些事(一)概述 缓存那些事(二)什么是缓存以及缓存的作用 缓存那些事(三)如何构建缓存 缓存那些事(四)缓存...

  • 缓存那些事(四)缓存面临的挑战

    缓存那些事(一)概述 缓存那些事(二)什么是缓存以及缓存的作用 缓存那些事(三)如何构建缓存 缓存那些事(四)缓存...

  • redis_内存淘汰策略

    redis_内存淘汰策略 介绍 Redis的内存淘汰策略是指在Redis的用于缓存的内存不足时,怎么处理需要新写入...

  • redis基础&spark操作redis

    Redis内存淘汰策略 将Redis用作缓存时,如果内存空间用满,就会自动驱逐老的数据。 为什么要使用内存淘汰策略...

网友评论

    本文标题:缓存那些事之缓存更新、失效以及内存淘汰策略

    本文链接:https://www.haomeiwen.com/subject/ybwaactx.html