leveldb 的缓存结构

💡 原文中文,约2600字,阅读约需7分钟。
📝

内容提要

文章介绍了LRU缓存结构的设计,重点分析了LRUHandle节点的成员及其作用,如缓存对象、清理函数和引用计数等,揭示了作者在可读性与性能之间的权衡。

🎯

关键要点

  • 文章介绍了LRU缓存结构的设计,重点分析了LRUHandle节点的成员及其作用。
  • LRUHandle节点的value成员用于存储缓存对象,类型为void*,用户需指定清理函数。
  • deleter是一个函数指针,用户需提供释放缓存内容的函数。
  • next_hash指向哈希表冲突链表中的下一个节点,next和prev用于双链表结构。
  • charge字段表示每个handle消耗的资源,通常为内存用量。
  • in_cache字段指示handle是否在哈希表中,影响资源释放的时机。
  • refs字段用于引用计数,确保资源在被完全释放前不会被回收。
  • hash字段存储key的哈希值,key_length表示key的字节数。
  • key_data指向key数据的第一个字节,内存分配时考虑了key的大小以减少申请次数。
  • key()方法返回key,方便对key的访问,返回类型为Slice。
➡️

继续阅读