首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MAXMEMORY管理易失性-lru对allkeys lru

MAXMEMORY管理易失性-lru对allkeys lru
EN

Stack Overflow用户
提问于 2020-01-07 12:49:54
回答 3查看 8.8K关注 0票数 5

我使用redis作为数据存储,而不是缓存,但是有一个maxmemory限制集,据我理解,maxmemory指定redis可以使用的RAM,如果不将数据交换回磁盘,那么内存限制就达到了。我有一个混合密钥,而一些有它们的过期集,而另一些没有,我尝试了易失性-lru和allkeys,正如文档中所指定的那样,它们都根据属性删除了旧的密钥。我应该使用什么配置来避免数据丢失?我是否应该设置所有密钥的有效期,并使用易失性-lru?我遗漏了什么?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-01-08 00:00:51

在Redis 2.4/2.6中,将内存交换到磁盘(虚拟内存)被废弃/删除。最有可能的是,您没有使用这样的旧版本。

maxmemorymaxmemory-policy耗尽内存时,您可以控制Redis所做的事情。这两者都是redis.conf中的设置。瞧一瞧。在最近的Redis版本中,将内存交换到磁盘并不是的选项。

如果Redis无法根据策略删除键,或者如果策略设置为“noeviction”,Redis将开始对将使用更多内存的命令(如SET、LPUSH等)进行错误答复,并将继续回复只读命令(如GET )。

如果到达maxmemory,则只有当maxmemory-policy中的驱逐策略集指示Redis要删除某些键以及如何选择这些键(volatile,lfu/lru/ttl/随机)时,才会丢失数据。否则,Redis开始拒绝写命令,以保留内存中的数据。继续提供读取命令。

您可以在没有maxmemory设置的情况下运行Redis (默认设置),因此它将继续使用内存,直到OS内存耗尽为止。

如果操作系统启用了虚拟内存,并且maxmemory设置允许Redis遍历可用的物理内存,那么操作系统(而不是Redis)开始将内存交换到磁盘。那么,您可以预期性能下降。

票数 4
EN

Stack Overflow用户

发布于 2020-01-07 14:42:52

一般来说,作为经验法则:

  1. 当您期望在请求受欢迎时使用allkeys策略,也就是说,您期望比其他元素更频繁地访问元素子集。--如果你不确定,这是个不错的选择。
  2. 如果您有一个循环访问,所有的键都被连续扫描,或者当您期望分布是一致的(所有的元素都可能以相同的概率访问),那么就使用所有的键。
  3. 如果您希望能够通过在创建缓存对象时使用不同的TTL值,向Redis提供有关哪些是好的过期候选值的提示,请使用volatile。
  4. volatile-lru和易失性随机策略在您希望同时使用单个实例进行缓存和拥有一组持久密钥()时非常有用。然而,运行两个Redis实例来解决这样的问题通常是一个更好的主意。

如文件所示

使用Redis作为LRU缓存

票数 2
EN

Stack Overflow用户

发布于 2020-01-10 07:18:52

如果您使用redis作为数据存储,请不要设置该参数,它用于缓存场景。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59628769

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档