LRU缓存和实现

LRU缓存

  • 是一种以LRU策略为缓存策略的缓存
  • 所谓的缓存策略,就是缓存满了以后又有新的数据加到缓存时,我们怎么替换清理缓存的方法
  • LRU是last recently used的缩写,就是近期最少使用算法,依据程序的局部性原理,淘汰数据策略是距离当前最久没有被访问的数据应该被淘汰

相关接口

  • 创建LRU缓存:
    – int LRUCacheCreate(int capacity,void **lruCache);
    – capacity为入参:缓存容量,lruCache为出参:缓存句柄。返回0成功,-1失败

  • 销毁缓存:
    – int LRUCacheDestory(void *lruCache);
    – lruCache为入参:缓存句柄,返回0成功,-1失败

  • 将数据放入LRU缓存中
    – int LRUCacheSet(void *lruCache,char key,char data);
    – lruCache为入参:缓存句柄,key为入参:数据索引,data为入参:要缓存的数据,当前设为字符,返回0成功,-1失败

  • 从LRU缓存中获取数据
    – char LRUCacheGet(void *lruCache,char key);
    – lruCache为入参:缓存句柄,key为入参:数据索引,返回要get的数据,不存在的话返回’\0’

  • LRU调试接口
    – void LRUCachePrint(void *lruCache);
    – 按访问时间从新到旧的顺序输出缓存数据

设计思路

  • 双向链表来维护LRU特性,该链表从头到尾的数据根据最近访问时间从最新的到最旧的。
    1.需要访问一块数据时,先调用LRUCacheGet尝试从缓存中获取数据。
    2.如果缓存中有此数据,则将改数据从链表中删除,重新放入链表表头。
    3.如果缓存中没有我们需要的数据,则从外部取得数据,调用LRUCacheSet接口将该数据放入缓存,将新数据插入表头。

  • 使用hashmap来保证缓存中数据的访问速度
    1.因为数据时存在双向链表中的,如果每次都遍历,效率太低。所以数据维护在双向链表,还将数据维护在一个hashmap中

代码

  • 还没写完。。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值