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_;
};