加入收藏 | 设为首页 | 会员中心 | 我要投稿 河北网 (https://www.hebeiwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 建站 > 正文

memcache内核,一文搞定!口试再也不怕了!!!(值得保藏)

发布时间:2019-06-17 23:42:22 所属栏目:建站 来源:58沈剑
导读:memcache是互联网分层架构中,行使最多的的KV缓存。口试的进程中,memcache相干的题目险些是必问的,关于memcache的口试提问,你能答复到哪一个条理呢? 画外音:很也许关乎,你拿到offer的薪酬档位。 第一类题目:知道不知道 这一类题目,考查用没用过,知

memcache的做法是,判定旧hash表中,item应该插入的桶,是否已经迁徙至新表中:

  • 假如已经迁徙,则item直接插入新hash表
  • 假如还没有被迁徙,则直接插入旧hash表,将来守候迁徙线程来迁徙至新hash表

(8) 为什么要这么做呢,不能直接插入新hash表吗?

memcache没有给出官方的表明,楼主臆测,这种要领可以或许担保一个桶内的数据,只在一个hash表中(要么新表,要么旧表),任何场景下都不会呈现,旧表新表查询两次,以晋升查询速率。

(9) memcache是怎么实现key逾期的,懒裁减(lazy expiration)详细是怎么玩的?

实现“超时”和“逾期”,最常见的两种要领是:

  • 启动一个超时线程,对全部item举办扫描,假如发明超时,则举办超时回调处理赏罚
  • 每个item设定一个超时信号关照,关照触发超时回调处理赏罚

这两种要领,都必要有特另外资源耗损。

mc的查询营业很是简朴,只会返回cache hit与cache miss两种功效,这种场景下,很是得当行使懒裁减的方法。

懒裁减的焦点是:

  • item不会被主动裁减,即没有超时线程,也没有信号关照来主动搜查
  • item每次会查询(get)时,搜查一下时刻戳,假如已经逾期,被动裁减,并返回cache miss

举个例子,若是set了一个key,有用期100s:

  • 在第50s的时辰,有效户查询(get)了这个key,判定未逾期,返回对应的value值
  • 在第200s的时辰,又有效户查询(get)了这个key,判定已逾期,将item地址的chunk开释,返回cache miss

这种方法的实现价钱很小,耗损资源很是低:

  • 在item里,插手一个逾期时刻属性
  • 在get时,插手一个时刻判定

内存老是有限的,chunk数目有限的环境下,可以或许存储的item个数是有限的,若是chunk被用完了,该怎么办?

如故是上面的例子,若是128B的chunk都用完了,用户又set了一个100B的item,要不要挤掉已有的item?要。

这里的启迪是:

  • 纵然item的有用期配置为“永世”,也也许被裁减;
  • 假如要做全量数据缓存,必然要细心评估,cache的内存巨细,必需大于,全量数据的总巨细,不然很轻易采坑;

(10) 挤掉哪一个item?怎么挤?

这里涉及LRU裁减机制。

假如操纵体系的内存打点,最常见的裁减算法是FIFO和LRU:

  • FIFO(first in first out):最先被set的item,最先被裁减
  • LRU(least recently used):最近起码被行使(get/set)的item,最先被裁减

行使LRU算法挤掉item,必要增进两个属性:

  • 最近item会见计数
  • 最近item会见时刻

并增进一个LRU链表,就可以或许快速实现。

画外音:以是,打点chunk的每个slab,除了free_chunk_list,尚有lru_list。

思绪比结论重要。

【本文为51CTO专栏作者“58沈剑”原创稿件,转载请接洽原作者】

memcache内核,一文搞定!口试再也不怕了!!!(值得保藏)

戳这里,看该作者更多好文

(编辑:河北网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读