我使用redis作为数据存储,而不是缓存,但是有一个maxmemory限制集,据我理解,maxmemory指定redis可以使用的RAM,如果不将数据交换回磁盘,那么内存限制就达到了。我有一个混合密钥,而一些有它们的过期集,而另一些没有,我尝试了易失性-lru和allkeys,正如文档中所指定的那样,它们都根据属性删除了旧的密钥。我应该使用什么配置来避免数据丢失?我是否应该设置所有密钥的有效期,并使用易失性-lru?我遗漏了什么?
发布于 2020-01-08 00:00:51
在Redis 2.4/2.6中,将内存交换到磁盘(虚拟内存)被废弃/删除。最有可能的是,您没有使用这样的旧版本。
当maxmemory和maxmemory-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)开始将内存交换到磁盘。那么,您可以预期性能下降。
发布于 2020-01-07 14:42:52
一般来说,作为经验法则:
如文件所示
发布于 2020-01-10 07:18:52
如果您使用redis作为数据存储,请不要设置该参数,它用于缓存场景。
https://stackoverflow.com/questions/59628769
复制相似问题