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。
➡️