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中
代码
- 还没写完。。