码迷,mamicode.com
首页 > 编程语言 > 详细

一种O1性能的LRU算法

时间:2015-11-09 15:29:41      阅读:220      评论:0      收藏:0      [点我收藏+]

标签:

LRU是一种淘汰算法,淘汰那些最久没被访问过的节点,以提高cache命中率。网游后台cache server经常会用到。这里说一种O1算法。

 

先明确两个操作相关的对象

1. DataKey: cache数据的key

2. IndexNode: 链表节点,内部有数据的index

 

list(单向链表)

      保存DataKeys。

hashtable(表)

      以DataKey作为key, IndexNode做为值,从DataKey可以定位到IndexNode。

 

访问一个数据对象

      先用DataKey查hash,如果找到,将IndexNode从list原来的位置拿掉,然后插到尾部。

      如果没找到,说明数据第一次被访问,有可能要淘汰旧点的数据。

      1. 查看hashtable size是否已达到最大值,未达到,将新的IndexNode插到list尾部;并且将DataKey和新的IndexNode保存到hashtable中。

      2. size已经是最大值,要淘汰一个旧节点来给新节点挪位置。从list头部取个节点,这个节点从list头部拿掉,然后通过DataKey把hash表对应的节点删除。

一种O1性能的LRU算法

标签:

原文地址:http://www.cnblogs.com/jice1990/p/4949774.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!