问题标签 [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.

0 投票
2 回答
154 浏览

c - 避免 LRU 缓存中的“大规模驱逐”

我已经实现了一个 LRU 缓存。插入新项目的过程如下所示:

  1. 检查干草堆中是否有足够的空间。如果是,请跳至 4。
  2. 删除最近最少使用的项目。
  3. 检查是否有足够的空间。如果没有,请重复 2。
  4. 在可用空间中插入项目。

物品在大海捞针中有效地随机排序。

当需要插入比以前的项目更大的项目时,就会出现问题。它会导致“大规模驱逐”,在这种情况下,它会继续驱逐,直到有足够的项目被驱逐,以至于恰好有几个连续的项目被驱逐。

这种“大规模驱逐”通常涉及驱逐数以万计的物品。

可以做些什么来避免或减轻这种“大规模驱逐”?

0 投票
0 回答
178 浏览

redis - REDIS 作为完美的 LRU

我想按照完美的 LRU 驱逐策略使用 REDIS。出于实验目的,我设置了 Redis 的最大内存大小。这个最大内存 REDIS 最多可以有 10 个固定数据大小的键/值对。我设置了 "maxmemory-policy :allkeys-lru" 和 maxmemory-samples :10 。当我插入新的键/值对时,它不会删除最旧的访问键/值对。当样本大小与它可以拥有的最大键数相同时,为什么不删除最旧的键。

那么当 maxmemory-samples=redis 中可能的键/值对的最大数量时 allkeys-lru 驱逐策略的行为应该是什么?

0 投票
1 回答
2186 浏览

redis - Redis 中的 Maxmemory 样本

我在 REDIS 中使用“maxmemory-policy allkeys-lru”进行密钥驱逐。REDIS 随机选择密钥进行驱逐。有没有办法查看 REDIS 选择的随机样本以驱逐密钥。

0 投票
2 回答
712 浏览

matlab - Matlab中是否存在函数缓存?

在 Python 中,我们有lru_cache一个函数包装器。将其添加到您的函数中,该函数只会针对每个不同的输入参数计算一次。

示例(来自 Python 文档):

我想知道Matlab中是否存在类似的东西?目前我正在使用缓存文件,如下所示:

我这样做的问题是,如果我改变我的功能,我需要删除缓存文件。

当我更改函数并且缓存已失效时,有没有办法通过 Matlab 实现这一点?

0 投票
1 回答
396 浏览

android - 缓存联系人照片的最佳方法

我正在尝试在我的活动中显示所有联系人列表,显示/缓存联系人照片的最佳方式是什么?假设我有 1000 多个联系人,并且他们都有个人资料照片。

我已经阅读了有关Google volley 库的信息,但它用于从 HTTP 加载图片。

此外,我还阅读了developer.com 中的缓存位图

  1. 两者有什么区别?
  2. 我应该使用什么来加载联系人个人资料图片?

谢谢您的帮助

0 投票
1 回答
1113 浏览

c++ - unordered_map 保留的行为

我的集合(unordered_map)的最大大小是事先知道的,所以我想在启动时保留内存以进行优化。成员函数是否reserve()达到了这个目的?文档说它将保留正确数量的存储桶以包含 N 个元素。这是否意味着只要我在地图中没有超过 N 个元素,它就会为 N 个元素保留空间并重用它们?目的是用于 LRU 缓存,因此在添加新元素之前必须逐出元素。我只想确保当 anerase_element()后跟insert_newelement().

0 投票
0 回答
738 浏览

java - 如何为自定义数据类型调整 LRU 缓存大小

当将 LRU 用于位图时,该数字1024用于计算要缓存的项目数。我想缓存自定义数据类型。说我的狗。如何调整缓存大小?另外,有没有人有一个简单的例子?我有位图的谷歌示例,但对于我的简单(?)应用程序来说可能有点过分了。http://developer.android.com/training/displaying-bitmaps/cache-bitmap.html

为了争论,假设每个 MyDog 对象都是在本地计算的,但计算起来很昂贵(这就是我缓存的原因)。

0 投票
4 回答
3813 浏览

android - 如何防止LRU缓存android中的内存不足错误

我已经使用内存 LRU 缓存在我的 android 应用程序中缓存位图。但是在将一些位图加载到 LRU 地图应用程序强制关闭后说内存不足异常。我已经花了一整天的时间,但还没有找到解决方案,请任何人都可以帮助我,我严重陷入了这个问题。在此先感谢。

这是我的代码

0 投票
3 回答
4068 浏览

c# - 这个算法实现是LRU还是MRU?

我正在使用 C# 在我的项目中实现 MRU(最近使用的)缓存。

我在 Google 上搜索了一些关于 MRU 的概念和实现,以及相反的 LRU(最近最少使用),发现这篇文章http://www.informit.com/guides/content.aspx?g=dotnet&seqNum=626描述了C# 中的 MRU 集合。

让我困惑的是,我认为这个实现是 LRU 而不是 MRU。谁能帮我确认这个集合类是否是 MRU?

下面的代码块是整个 MRUCollection 类。谢谢。


http://en.wikipedia.org/wiki/Cache_algorithms#Most_Recently_Used
最近使用 (MRU):与 LRU 相比,首先丢弃最近使用的项目。

根据我的理解,由于最近访问的节点被移动到列表的最前面,如果缓存已满,我们应该删除列表的第一个节点而不是最后一个节点。

0 投票
1 回答
968 浏览

java - 从头开始使用双链表的 LRU 缓存 - moveToHead (Java)

我已经实现了一个简单的 LRU 缓存,它是一个从头开始手动编写的双向链表。缓存中填充了对象请求,这些对象通过它们的数字(整数)ID 来区分。这些 Request 对象作为对一组 N < L 个预定义的 Request 对象的 L 个随机独立且相同分布的请求流生成,并一个一个到达缓存(即以串行方式)。然后我检查缓存命中或未命中以及当前缓存大小是否已达到最大缓存大小,然后根据具体情况,我执行将请求项插入缓存或从请求项替换 LRU 缓存项。

缓存的操作之一如下:当我遇到缓存命中时,如果请求的项目不在头部,则必须将其移动到那里。

例如,假设缓存的最大大小 M = 4,其在给定时间的内容如下:

项目:7 | 3 | 4 | 5

缓存位置索引:0 | 1 | 2 | 3(0是头,3是尾)

现在,如果我们有一个缓存命中项目 4,因为这个项目不在缓存的头部,它应该被移动到那里,结果将是:

项目:4 | 7 | 3 | 5

缓存位置索引:0 | 1 | 2 | 3(0是头,3是尾)

但是,当我运行代码时,结果是这样的:

项目:4| 7 | 3 | 4 | 5

缓存位置索引:0 | 1 | 2 | 3 | 4(0是头,4是尾)

换句话说,相关项(在本例中为第 4 项)并没有从缓存中删除然后添加到头部,而是简单地添加到头部。因此,缓存大小增加了 1(在本例中,它变为 5,大于最大缓存大小 M = 4)。

这是相关代码,以及显示我认为问题性质的注释:

正如我在评论中所说,如果在第一行代码之后我将对象请求设置为 null 以将其删除,那么以下代码行将移动到一个 null 对象的头部。如何解决这个问题?我假设我必须在下面的代码中使用临时请求变量,但我还没有弄清楚如何去做。