slice.h/hash.h/chche.h分析

一、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中使用,在外部做多级缓存也用

他们的关系为:

  

 

posted @ 2022-03-01 09:34  Z9Y1J5  阅读(40)  评论(0编辑  收藏  举报