一、slice.h
- string都封装成了slice
- 支持的方法有:构造、拷贝构造、赋值、clear()、empty()、size()
- remove_prefix(n):指定长度前缀移除
- starts_with(x):是否是以x开始
- compare(x):返回值0/-1/1
二、hash.h
- 是MurMurHash的一种变体,是一种非加密型哈希函数
- 相当于MD5,开销低
三、cache.h
使用了LRU思想,cache为接口类
- sharedLRUCache:封装了16个LRUCache缓存片(作用:为了多线程访问,尽可能快速减少锁开销,提高读写并行度)
- 查找key看属于哪一个分片,分片的设计方法:取32位hash值的高4位
-
LRUCache:循环双向链表,其对象容器为hashtable,将缓存设为两个不相交的集合in_use、lru。每个LRUCache由一把锁mutex_守护
-
LRUHandle:节点类,其next_hash指针用于hashtable中的bucket,next_hash采用拉链法处理哈希冲突,每个节点都有一个next_hash
-
Insert:插入LRUHandle
-
用的是自己实现的hashtable。优点:更快,除了传key外还需传hash,这样是hash值除了hashtable中使用,在外部做多级缓存也用
他们的关系为: