摘要: LRU是Cache服务中最常用的淘汰算法,经典的实现为Hash+双链表,可以保证数据访问和淘汰的期望复杂度为O(1).但是该算法有两个问题:双链表指针开销大;多线程不友好,即使是读也要加锁来修改链表的指针,将最近访问的节点提到队首.Redis的这个近似LRU算法非常有启发意义。Redis最主要的做法就是:不维护双链表,只是每个Object维护一个相对的时间,淘汰时,随机取3个或者更多的,找到最老的进行淘汰.不量节省了双链表的指针开销,读时还不用加锁.虽不能保证一定淘汰最老的,但倾向于淘汰偏老的对象, 经过我们线上的实测:和标准的LRU对比,命中率的损失非常小, 效果不错。http://oldb 阅读全文
posted @ 2013-01-30 13:32 visionwang 阅读(1196) 评论(0) 推荐(0) 编辑