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类进行了具体的实现,在下一章节中将对此文件进行分析。

学习是一种慰藉,编程是一种情怀,技术提升永不可辜负!
每天进步一点点!