leveldb 笔记五:LRUCache的实现
leveldb 利用 cache 来通过一个 key 快速地检索到 value 值,其在 include/leveldb/cache.h
中定义了 cache 应该实现的接口。leveldb 要求 cache 实现内部的同步,从而可以让外部的线程并发地访问。像前面介绍的运行时环境 Env 一样,外部的使用者可以根据接口自定义其 cache 的实现。同时,leveldb 也提供了默认的基于 LRU(Least-Recently-Used) 的 cache。
我们首先看一下 cache 的定义,其在类定义的时候声明了一个 Rep
结构,并在类中定义了一个指向 Rep
的指针 rep_
:
class Cache {
private:
struct Rep;
Rep* rep_;
...
}
在后面的学习中我们可以看到,在 table_builder 的定义中,作者也采用了这种方式。可能有很多人不明白作者为什么采用这种方式来定义类成员。事实上,这正是 Scott Meyers 在 Effective C++ 条款 31 所提到的