简单的LRU缓存实现

来源:互联网 发布:yum命令无法使用 编辑:程序博客网 时间:2024/05/21 10:53

1、接口:

  1)value_t get(key_t key)、 

  2)set(key_t key, value_t value)

2、经典实现用的数据结构: hash_map + 双向链表DList;

3、简单做法:

1)hash_map: 存储 <key, value节点的地址>;

2)Dlist:包含一个头结点Head、实际的数据节点N1~Nn、一个尾节点Rail;

3)value_t  get(key_t key):

   按key在hash_map中查询:

    a、若找到:

返回节点地址(在链表中),从链表摘除这个节点,将这个节点放到链表的第一个数据节点N1位置;

    b、否则没找到调用set(key_t key, value_t value)方法。

4)set(key_t key, value_t value):

a)插入node到双链表头中: 

    若缓存已满:将链表最后一个数据节点Nn从链表摘除,从hash_map删除, 然后将Nn赋值为key对应的value,插到链表数据节点N1位置;

    若缓存未满: 将节点插入到链表N1位置;

b)插入这个<key,node地址>到hash_map;