【发布时间】:2013-09-23 21:12:09
【问题描述】:
我正在学习缓存,有一个关于缓存并发的问题。
据我所知,LRU缓存是用双链表+哈希表实现的。那么LRU缓存是如何处理高频并发的呢?请注意,从缓存中获取数据和将数据放入缓存都会更新链表和哈希表,因此缓存会一直被修改。
如果我们使用互斥锁来保证线程安全,那么如果大量人访问缓存,速度会不会变慢?如果我们不使用锁,使用什么技术?提前致谢。
【问题讨论】:
-
是的,你完全正确。在高度并发的环境中,如果锁必须保持很长一段时间,则监视器锁定将具有显着的性能限制。在这种情况下,您可能有兴趣开发基于原子操作(例如 putIfAbsent)的并发缓存。然而,这是一种复杂的方法,最好的办法是使用并发库,如果你可以适应的话。在 Brian Goetz 的 Java Concurrency in Practice 中开发了一个基本的并发缓存。在此处查看此链接:stackoverflow.com/questions/16484939/concurrent-cache-in-java。
标签: caching concurrency