leveldb学习笔记之九——include/leveldb/cache.h
原创
©著作权归作者所有:来自51CTO博客作者wx6364ffafc5a30的原创作品,请联系作者获取转载授权,否则将追究法律责任
cache创建了一个给定尺寸的缓存,该缓存使用最近最少使用的逐出原则。
源码如下:
class LEVELDB_EXPORT Cache {
public:
Cache() = default; //设置默认构造函数
Cache(const Cache&) = delete; //禁止拷贝构造
Cache& operator=(const Cache&) = delete; //禁止赋值操作符
// 析构函数
virtual ~Cache();
// 缓冲中存储的项的不透明句柄
struct Handle { };
//插入一个从key->value的映射到cache中,并为其分配空间,返回是对应映射的句柄。
//当不使用时,需要调用this->Release(handle)释放句柄
virtual Handle* Insert(const Slice& key, void* value, size_t charge,
void (*deleter)(const Slice& key, void* value)) = 0;
// 查找key对应的映射,如果没有找到返回nullptr。
// 当不使用时,同样需要调用this->Release(handle)释放句柄
virtual Handle* Lookup(const Slice& key) = 0;
// 释放句柄函数
virtual void Release(Handle* handle) = 0;
// 返回映射句柄对应的value值
virtual void* Value(Handle* handle) = 0;
// 如果缓冲中包含key对应的映射,则将其清除。
// 值得注意的,在释放handle之前,底层将一直保留该条目
virtual void Erase(const Slice& key) = 0;
// 返回一个数字id,可能有多个客户端共享相同的cache来风格key的空间
virtual uint64_t NewId() = 0;
// 删除所有未在使用中的缓存项,内存使用受限的应用程序可能希望调用此方法以减少内存的使用量。
// prune()的默认实现是不起任何作用。
virtual void Prune() {}
// 返回缓存中存储的所有元素的组合的空间估计。
virtual size_t TotalCharge() const = 0;
private:
void LRU_Remove(Handle* e);
void LRU_Append(Handle* e);
void Unref(Handle* e);
struct Rep;
Rep* rep_;
};
在util/cache.cc中由ShardedLRUCache对Cache类进行了具体的实现,在下一章节中将对此文件进行分析。
学习是一种慰藉,编程是一种情怀,技术提升永不可辜负!
每天进步一点点!