问题标签 [lru]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - 你将如何在 Java 中实现 LRU 缓存?
请不要说 EHCache 或 OSCache 等。出于这个问题的目的,假设我想只使用 SDK 来实现我自己的(边做边学)。鉴于缓存将在多线程环境中使用,您将使用哪些数据结构?我已经使用LinkedHashMap和Collections#synchronizedMap实现了一个,但我很好奇是否有任何新的并发集合会是更好的候选者。
更新:当我发现这个金块时,我正在阅读Yegge 的最新消息:
如果您需要恒定时间的访问并希望维护插入顺序,那么最好的方法就是 LinkedHashMap,这是一种真正美妙的数据结构。唯一可能更精彩的方法是如果有一个并发版本。可惜。
在我使用上面提到的LinkedHashMap
+实现之前,我的想法几乎完全相同。Collections#synchronizedMap
很高兴知道我没有忽略一些事情。
根据到目前为止的答案,对于高度并发的 LRU,我最好的选择是使用一些相同的逻辑来扩展ConcurrentHashMapLinkedHashMap
。
java - 在java中简单易用的LRU缓存
我知道实现起来很简单,但我想重用已经存在的东西。
我要解决的问题是我为不同的页面、角色加载配置(来自 XML,所以我想缓存它们)......所以输入的组合可以增长很多(但 99% 不会)。为了处理这 1%,我想在缓存中有一些最大数量的项目......
直到知道我在 apache commons 中找到了 org.apache.commons.collections.map.LRUMap ,它看起来不错,但还想检查其他内容。有什么建议吗?
.net - 如何让我的简单 .NET LRU 缓存更快?
昨晚和今晚,我尝试了几种不同的方法,并提出了一种类似于下面 Jeff 提出的方法(我什至已经完成了他在更新中提出的建议,并将我自己的简单 LL 实现放在一起以获得额外的收益)。这是代码,此时它看起来不再特别干净,但我已经经历了无数次改变我所能做的任何事情来提高性能。
有一些看起来/感觉很奇怪的部分——比如在进行添加时重用旧节点——但我能够从它们中获得可观的性能提升。我也对从节点上的实际属性切换到公共变量所产生的差异感到有些惊讶,但我想这就是它与这些东西的关系。在这一点上,上面的代码几乎完全受到字典操作的性能限制,所以我不确定我是否会从混搭它中得到更多。我会继续思考并研究一些回应。
来自原帖的解释:大家好。因此,我编写了一个简单的轻量级 LRU 实现以用于压缩库(我使用它在基于散列的 LZW 样式的输入中查找匹配的字节字符串),并且我正在寻找制作方法它更快。
javascript - Javascript 中的 LRU 缓存实现
Java 有 LinkedHashMap 可以让你 99% 到达 LRU 缓存。
是否有 LRU 缓存的 Javascript 实现,最好来自信誉良好的来源,即:
- 可以理解的
- 高效(摊销 O(1) 获取/放置/删除)
? 我一直在网上搜索,但找不到;我以为我在Ajax Design Patterns上找到了一个,但它掩盖了该sendToTail()
方法并且具有 O(n) 性能(大概是因为队列和关联数组是分开的)。
我想我可以自己写,但我已经学会了为核心算法重新发明轮子可能对一个人的健康有害:/
powershell - 在 5GB 可用空间可用之前,如何删除 LRU 文件夹?
给定一个文件夹,比如说 \\localhost\c$\work\
.
我想每 15 分钟运行一次 powershell 脚本,以确保有 5GB 可用空间。
如果 < 5GB 可用,请删除工作中最近最少使用的文件夹,直到 >5GB 可用。
想法?
java - 关于Java中LRU Cache实现的问题
在 Java 中实现 LRU Cache 的标准示例指向示例 depot url http://www.exampledepot.com/egs/java.util/coll_Cache.html
在下面的代码片段中添加新条目后,默认情况下如何调用 removeEldestEntry?
java - 如果数据频繁更改,应该使用什么类型的 java 缓存?
我有一个 JSP,它按多种聚合类型显示数据。例如,按市场、按类别、按服务器类型等。我拥有的是按出版商和时间划分的数据。就我而言,Publisher 是最细粒度的数据。
现在,这些数据每 1/2 小时更改一次。每半小时的数据量几乎是 5K,任何人一次查看数据 4 小时到 24 小时。在这些情况下,当加载服务器时,JSP 加载时间会迅速增加。我尝试使用 LinkedHashMap 和 LRU 缓存,但这似乎不是最佳解决方案,因为性能仍然不好。
任何关于使用哪种数据结构的想法都将不胜感激。
c++ - 生产代码中的 LRU 实现
我有一些 C++ 代码需要使用 LRU 技术实现缓存替换。
到目前为止,我知道两种实现 LRU 缓存替换的方法:
- 每次访问缓存数据时使用timeStamp,最后比较替换时的timeStamps。
- 使用一堆缓存项,如果最近访问它们,则将它们移动到顶部,因此最后底部将包含 LRU Candidate。
那么,其中哪一个更适合用于生产代码?
他们还有其他更好的方法吗?
algorithm - 为什么 LRU 比 FIFO 好?
为什么最近最少使用的页面文件比 FIFO 更好?
caching - 寻找 FIFO/LRU 文件存储系统
我正在寻找实现基于磁盘的缓存系统。这个想法是分配一定数量的磁盘空间并保存多少数据,当我用完空间时丢弃旧文件。
LRU 是我的首选删除策略,但我愿意满足于 FIFO。在搜索缓存算法时,讨论似乎主要是基于内存的缓存。例如, Memcached正是我正在寻找的,除了它是基于内存的。另一方面,像 Memcachedb、couchdb 等解决方案似乎没有 LRU 功能。
我发现最接近的是squid 代理服务器存储系统。COSS似乎是记录最多的一个,但要使用它,我可能不得不将它重写为一个独立的进程(或库)。
我可以用什么项目或(java/python)库来做这样的事情?
编辑:找到这个相关的问题。