LRU cache,支持并发访问实现一个LRU cache,支持并发访问
LRU cache:容量上限,满时淘汰最久未使用的项;get/put 都算「使用」。并发:多线程同时 get/put,需保证正确性与尽量少阻塞。典型接口:get(key)、put(key, value)、可选 get 时刷新「最近使用」顺序。
经典实现:哈希表 + 双向链表。哈希表 key → 链表节点(含 key、value);链表按「最近使用」顺序,头为 MRU、尾为 LRU。get:查哈希表、有则把节点移到头并返回值。put:有则更新并移到头;无则新建节点插头,若超容量则删尾节点并从哈希表删除。并发:用一把读写锁(或 mutex)保护整个结构;或分段锁 + 每段一个 LRU;高并发可考虑 per-bucket 锁或 lock-free 结构(实现复杂)。
双向链表便于 O(1) 删除任意节点并移到头;哈希表 O(1) 查找。注意「先删后加」避免重复 key 时链表成环。并发下 put 可能触发 evict,需在锁内完成「删尾 + 删表项」。
| 返回模块 | 返回总览 |