当前位置: 首页 > 面试题库 >

Redis内存不足时该怎么办?

翟俊茂
2023-03-14
问题内容

这可能是一个简单的问题,但我很难找到答案。Redis 2.0如何处理最大分配内存不足?它如何决定要删除哪些数据或将哪些数据保留在内存中?


问题答案:

如果您打开了虚拟内存功能(我认为是2.0或2.2版中的新增功能),那么当内存用尽时,Redis将开始将“不太常用”的数据存储到磁盘上。

如果禁用Redis中的虚拟内存,则好像操作系统的虚拟内存开始用完(即交换),并且性能会大大下降。

现在,您还可以使用maxmemory参数配置Redis,这可以防止Redis使用更多的内存(默认值)。

达到maxmemory时,较新版本的Redis具有各种策略:

  • volatile-lru删除具有过期集的密钥中的一个,以尝试删除最近未使用的密钥。
  • volatile-ttl删除具有过期集的密钥,并尝试删除剩余生存时间短的密钥。
  • volatile-random从具有到期集的密钥中删除一个随机密钥。
  • allkeys-lru与volatile-lru类似,但是将删除每种密钥,包括普通密钥或具有过期集的密钥。
  • allkeys-random和volatile-random一样,但是会删除所有类型的键,包括普通键和具有过期集的键。

如果选择仅删除设置了EXPIRE的键的策略,则当Redis内存不足时,程序看起来就像只是中止了malloc()操作。就是说,如果您尝试存储更多数据,则该操作只会惨败。

一些链接以获取更多信息(因为您不应该只相信我的话):

  • http://antirez.com/post/redis-as-LRU-cache.html
  • http://eli.thegreenplace.net/2009/10/30/handling-out-of-memory-conditions-in-c/


 类似资料:
  • 我正在努力解决古老的字谜问题。多亏了许多教程,我能够迭代一组字符串,递归地找到所有的排列,然后将它们与英语单词列表进行比较。我发现的问题是,在大约三个单词之后(通常是关于“变形”之类的东西),我会得到一个OutOfMemory错误。我试着把我的批分成小的集合,因为它似乎是消耗我所有内存的递归部分。但即使只是“变形”也把它锁起来了... 编辑:根据出色的反馈,我已经将生成器从排列更改为工作查找: 它

  • 最近,在运行我们的应用程序时,我们遇到了内存溢出异常。 这是异常发生之前的堆转储 看起来老根差不多吃饱了(76%)。我假设当它最终达到100%时,OOM就会发生。然而,看起来eden只有13%。 有人能解释为什么即使年轻一代还有一些空间,OOM也会发生吗?

  • 问题内容: 我今天遇到一个奇怪的问题。对于其他人来说,这可能是一个简单的答案,但这让我感到困惑。为什么下面的代码会导致内存错误? 我得到了这两个错误之一…第一个是在节点的解释器中运行此代码时,第二个是通过nodeunit运行它时: 严重错误:CALL_AND_RETRY_2分配失败-内存不足 严重错误:JS分配失败-内存不足 问题答案: 当我尝试访问阵列时会发生这种情况。但是获取长度却没有。

  • 问题内容: 今天,我运行了用于文件系统索引编制的脚本,以刷新RAID文件索引,并在4小时后崩溃并出现以下错误: 服务器配备16GB RAM和24GB SSD交换。我非常怀疑我的脚本是否超过了36gb的内存。至少不应该 脚本使用文件元数据(修改日期,权限等,无大数据)创建存储为对象数组的文件索引 过去,我曾经用此脚本经历过奇怪的节点问题,这使我不得不这样做。在处理诸如String之类的大文件时,由于

  • 我正在PyTorch中运行一个评估脚本。我有许多经过训练的模型(*.pt文件),我将其加载并移动到GPU,总共占用270MB的GPU内存。我使用的批量大小为1。对于每个示例,我加载一个图像并将其移动到GPU。然后,根据样本,我需要运行一系列经过训练的模型。有些模型以张量作为输入和输出。其他模型的输入是张量,输出是字符串。序列中的最终模型总是有一个字符串作为输出。中间张量临时存储在字典中。当模型使用

  • STS不断崩溃,项目文件夹中的日志如下: 它始于我使用Winmerge比较和修改STS之外的java、pom和属性文件时