遇到一道面试题,分布式 LRU 的设计。

2019-06-07 01:45:26 +08:00
 zijing07
这道题总共分了以下几层来问的(答案是我想的,不一定对哈,欢迎指正):

1. 纯内存 LRU,那么就是 leetcode 的原题,双向链表+HashMap
2. 内存放不下了怎么办,文件操作 + HashMap
3. 多线程怎么做,HashMap 分 bucket 加锁,文件共用一把锁(答到这里我已经觉得不太好了,因为最后多线程还是会锁在文件这里,造成等待)
4. 分布式怎么做,Hash 到对应的分片拿数据,但是怎么在多台机器之间实现类似双向链表的逻辑,我就没答上来了。

希望大家有想法的一起讨论一下。
2041 次点击
所在节点    问与答
3 条回复
raynor2011
2019-06-07 16:31:49 +08:00
分布式 LRU 难道不是一致性哈希加单机 LRU 吗,然后文件是干嘛的,LRU 到内存阈值了就释放啊,要不然为什么叫 LRU
zijing07
2019-06-08 01:21:28 +08:00
对对,是一致性哈希。我这块没整明白,上面是我乱讲的。多谢!
jianzhiyao020
2020-05-07 17:06:46 +08:00
1.LRU 就普通的 LRU,但是实际使用上来说,需要提供 evict 事件,提供持久化缓存数据的操作机会
2.内存放不下,提供 onCacheMiss 事件和 OnEvict 事件,喜欢咋搞咋搞
3.多线程就加锁嘛,这里怕锁的堆积的话,可以把读文件和写文件搞到队列里面进行
4.分布式一致性 hash,hash 到分片操作

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/571697

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX