Redis as an LRU cache

LRU是Cache服务中最常用的淘汰算法,经典的实现为Hash+双链表,可以保证数据访问和淘汰的期望复杂度为O(1).但是该算法有两个问题:双链表指针开销大;多线程不友好,即使是读也要加锁来修改链表的指针,将最近访问的节点提到队首.Redis的这个近似LRU算法非常有启发意义。

 Redis最主要的做法就是:不维护双链表,只是每个Object维护一个相对的时间,淘汰时,随机取3个或者更多的,找到最老的进行淘汰.不量节省了双链表的指针开销,读时还不用加锁.虽不能保证一定淘汰最老的,但倾向于淘汰偏老的对象, 经过我们线上的实测:和标准的LRU对比,命中率的损失非常小, 效果不错。

http://oldblog.antirez.com/post/redis-as-LRU-cache.html

posted @ 2013-01-30 13:32  visionwang  阅读(1196)  评论(0编辑  收藏  举报