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 维护线程的异步删除,来完成真正的删除动作。
-
阴阳师妖怪搜索小程序(式神猎手)带后端
阴阳师妖怪搜索小程序名称:式神猎手主页包含热门搜索,缓存最热式神的搜索;搜索支持完整匹配或者单字匹配;点击搜索结果直接跳转到式神详... 1403 0 24-06-02 -
骆驼优品服饰商城小程序
“骆驼优品服饰商城小程序(微信小程序源码).zip”指的是一个包含微信小程序源代码的压缩文件,专门用于构建一个名为“骆驼优品服饰商城”... 849 0 24-10-26 -
Anlink安卓手机投屏控制软件(带简体中文包)
Anlink中文版是一款基于Scrcpy二次开发的全新轻量级免费安卓投屏软件,也叫多屏协同工具,也是一款简单易用的用Windows控制Android设... 1163 0 25-02-09 -
app移动端网页资讯新闻模板
一套比较实用的手机新闻资讯网站模板,wap新闻门户网站整站html模板下载。页面包含首页,评测,资讯,专题,排行榜,类别等16个页面 386 0 21-06-22 -
教师资格证考试-小学
1 第一部分 综合素质.pdf2 第二部分 保教知识与能力.pdf2011年下半年教师资格证考试《小学综合素质》真题.pdf2012年上半年教师资格证考... 1207 0 24-08-19 -
可拖拽移动漂亮的zDialog弹出层代码
333 0 21-06-02 -
步步高字典小程序
说明:实现拍照查字功能,特色:使用七牛云存储ES6语法数据接口:https://api.getweapp.com/engine/qiniu/uploadhttps://api.getweapp.com/e... 1216 0 24-11-05 -
左边展开菜单栏
332 0 21-06-02
发表我的评论
- 这篇文章还没有收到评论,赶紧来抢沙发吧~