lru缓存结构

在项目中遇到了缓存问题,整理一下:

CacheInfo

包括
节点超时时间 expiry_time
最大节点数 max_nodes
节点指针链表 lru_nodes
key和缓存节点组成的map _cache_nodes
操作有:
在链表头部插入节点
在链表尾部删除节点
从链表中删除某个节点
把某个节点换到链表头部


插入缓存节点:如果key存在,则替换旧节点,并换到链表头部,更新map;如果链表还有容量,则直接插入到链表头部,插入到map;否则,删除链表尾节点,插入节点到链表头部和map中
获取节点:未命中,返回错误;命中,如果过期,在列表和map中删除节点;命中并且没有过期,把节点调整到链表头部
拷贝节点:调用获取节点函数
删除节点:如果命中,删除;没命中返回错误

 


_CNod_
每个缓存节点内部构造
key
检索结果的相关信息,如结果条数,内存长度,会员数等
检索结果缓冲区 ResultBuf
指向_CNod    list的指针****lru_node
buffer的创建时间
是否是短缓存

posted @ 2018-02-02 15:38  keke_hi  阅读(181)  评论(0)    收藏  举报