memcache内核,一文搞定!口试再也不怕了!!!(值得保藏)
memcache的做法是,判定旧hash表中,item应该插入的桶,是否已经迁徙至新表中:
(8) 为什么要这么做呢,不能直接插入新hash表吗? memcache没有给出官方的表明,楼主臆测,这种要领可以或许担保一个桶内的数据,只在一个hash表中(要么新表,要么旧表),任何场景下都不会呈现,旧表新表查询两次,以晋升查询速率。 (9) memcache是怎么实现key逾期的,懒裁减(lazy expiration)详细是怎么玩的? 实现“超时”和“逾期”,最常见的两种要领是:
这两种要领,都必要有特另外资源耗损。 mc的查询营业很是简朴,只会返回cache hit与cache miss两种功效,这种场景下,很是得当行使懒裁减的方法。 懒裁减的焦点是:
举个例子,若是set了一个key,有用期100s:
这种方法的实现价钱很小,耗损资源很是低:
内存老是有限的,chunk数目有限的环境下,可以或许存储的item个数是有限的,若是chunk被用完了,该怎么办? 如故是上面的例子,若是128B的chunk都用完了,用户又set了一个100B的item,要不要挤掉已有的item?要。 这里的启迪是:
(10) 挤掉哪一个item?怎么挤? 这里涉及LRU裁减机制。 假如操纵体系的内存打点,最常见的裁减算法是FIFO和LRU:
行使LRU算法挤掉item,必要增进两个属性:
并增进一个LRU链表,就可以或许快速实现。 画外音:以是,打点chunk的每个slab,除了free_chunk_list,尚有lru_list。 思绪比结论重要。 【本文为51CTO专栏作者“58沈剑”原创稿件,转载请接洽原作者】 戳这里,看该作者更多好文
(编辑:河北网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |