MC如何淘汰冷key和失效key
淘汰策略
Mc 作为缓存组件,意味着 Mc 中只能存储访问最频繁的热数据,一旦存入数据超过内存限制,就需要对 Mc 中的冷 key 进行淘汰工作。Mc 中的 key 基本都会有过期时间,在 key 过期后,出于性能考虑,Mc 并不会立即删除过期的 key,而是由维护线程逐步清理,同时,只有这个失效的 key 被访问时,才会进行删除,从而回收存储空间。所以 Mc 对 key 生命周期的管理,即 Mc 对 key 的淘汰,包括失效和删除回收两个纬度,知识结构如下图所示。
key 的失效,包括 key 在 expire 时间之后的过期,以及用户在 flush_all 之后对所有 key 的过期 2 种方式。
而 Mc 对 key/value 的删除回收,则有 3 种方式。
第一种是获取时的惰性删除,即 key 在失效后,不立即删除淘汰,而在获取时,检测 key 的状态,如果失效,才进行真正的删除并回收存储空间。
第二种方式是在需要对 Item 进行内存分配申请时,如果内存已全部用完,且该 Item 对应的slabclass 没有空闲的 chunk 可用,申请失败,则会对 LRU 队尾进行同步扫描,回收过期失效的 key,如果没有失效的 key,则会强制删除一个 key。
第三种方式是 LRU 维护线程,不定期扫描 4 个 LRU 队列,对过期 key/value 进行异步淘汰。
flush_all
Mc 中,key 失效除了常规的到达过期时间之外,还有一种用 flush_all 的方式进行全部过期。如果缓存数据写入异常,出现大量脏数据,而又没有简单的办法快速找出所有的脏数据,可以用 flush_all 立即让所有数据失效,通过 key 重新从 DB 加载的方式来保证数据的正确性。flush_all 可以让 Mc 节点的所有 key 立即失效,不过,在某些场景下,需要让多个 Mc 节点的数据在某个时间同时失效,这时就可以用 flush_all 的延迟失效指令了。该指令通过 flush_all 指令后面加一个 expiretime 参数,可以让多个 Mc 在某个时间同时失效所有的 key。
flush_all 后面没有任何参数,等价于 flush_all 0,即立即失效所有的 key。当 Mc 收到 flush_all 指令后,如果是延迟失效,会将全局 setting 中的 oldest_live 设为指定 N 秒后的时间戳,即 N 秒后失效;如果是立即失效,则将全局 setting 中的 oldest_cas 设为当前最大的全局 cas 值。设置完这个全局变量值后,立即返回。因此,在 Mc 通过 flush_all 失效所有 key 时,实际不做任何 key 的删除操作,这些 key ,后续会通过用户请求同步删除,或 LRU 维护线程的异步删除,来完成真正的删除动作。
-
小古文观止·基础篇、启蒙篇、提高篇
1290 0 24-07-13 -
css3导航菜单特效
371 0 21-05-17 -
MongoDB权威指南
本书的组织结构本书分为六个部分,涵盖了开发、管理以及部署的方方面面。熟悉MongoDB第1章将简要讲述MongoDB的背景:项目创立原因,希望达... 871 0 24-05-24 -
销售页图标
836 0 21-07-12 -
谷歌浏览器,Edge浏览器,QQ浏览器,360极速浏览器可用的IDM插件
随着互联网的发展,我们每天都在使用浏览器浏览各种网站和下载文件。IDM(Internet Download Manager)作为一款知名的下载工具,深受广大... 1208 0 24-06-01 -
零基础学HTML+CSS
现在市面上的许多可视化的网页编辑工具都达到了“所见即所得”的效果,这些图形化的开发工具可以直接编辑网页,而不用书写麻烦的标记。这使... 1017 0 24-05-24 -
如何切割长图打印成 A4 尺寸?|99% 的人不知道的浏览器打印图片技巧
如何切割长图,并打印成 A4 尺寸?有什么好的办法,把一张长截图分割成几张,方便用A4纸打印出来的吗?或者能转成标准的pdf文档也行,主... 1681 0 24-07-03 -
绿色圃中小学教育网
一个在线教育网站,涵盖了很多视频教学资源。它的所有教学资源都是以帖子的形式发布,并且还按照不同的年级进行了详细分类,包括小学语文、... 1997 0 24-07-17
发表我的评论
- 这篇文章还没有收到评论,赶紧来抢沙发吧~