Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
超过Redis maxmemory_Redis - Fatal编程技术网

超过Redis maxmemory

超过Redis maxmemory,redis,Redis,我正在我的本地机器上试验redis 3.0逐出策略-我想限制最大内存,这样redis消耗的内存不能超过20 MB 我的配置: loglevel debug maxmemory 20mb maxmemory-policy noeviction 从这里,我运行redis服务器,配置后是 redis基准-q-n100000-c50-p12 在内存中存储一串密钥。这使得我的mac上redis的内存使用量达到21MB,超出了指定的限制1 MB。如果我再次运行它,将消耗更多 根据协议,这应该由我的maxm

我正在我的本地机器上试验redis 3.0逐出策略-我想限制最大内存,这样redis消耗的内存不能超过20 MB

我的配置:

loglevel debug
maxmemory 20mb
maxmemory-policy noeviction
从这里,我运行
redis服务器
,配置后是

redis基准-q-n100000-c50-p12

在内存中存储一串密钥。这使得我的mac上redis的内存使用量达到21MB,超出了指定的限制1 MB。如果我再次运行它,将消耗更多

根据协议,这应该由我的maxmemory指令和逐出策略控制,在随后的写操作中会抛出一个错误,但我发现情况并非如此


为什么redis服务器消耗的内存超过分配的内存

Redis
maxmemory
策略控制用户数据内存的使用(如注释中的sas)。但这里有一些更复杂的内存消耗情况:

  • 取决于操作系统
  • 取决于CPU和使用的编译器(读作使用了Redis x86/x64)
  • 取决于使用的分配器(在Redis中默认)
在现实世界的应用程序(如Redis)中,您对内存管理的权限是有限的。因此,您的应用程序将为编译为x64或x86)的同一应用程序使用不同的内存。在Redis的情况下,内存的数据开销最接近2倍

为什么这么重要 每次您向Redis写入一些数据时,它都会使用分配器分配或重新分配内存。最后一位(jemalloc)对此有着复杂的策略。简而言之,分配内存大小,以最接近的二次方排列(您需要17个字节,分配32个字节)。许多Redis结构使用相同的策略。例如,HASH(ZSET因为HASH在引擎盖下使用)使用这样的策略。字符串使用了更为粗野的策略-在REDIS_编码(1 mb)下将大小加倍(通过重新分配),或者只分配所需大小+REDIS_编码(1 mb)

那么,你是在限制你的
maxmemory
——操作系统中实际使用的内存可能会多得多,Redis对此无能为力


p、 请不要把它当作广告。你的问题离我很近。这里是关于Redis的真实内存使用情况(它们都是俄语的,很抱歉。我计划在这个新年周末用英语翻译它们。之后更新链接。翻译部分)

操作系统的内存使用情况与用户数据占用的内存不同-使用
INFO
使用
redis cli INFO | grep memory
并查看度量
使用的内存(人类)
,我也超出了限制,但无法产生任何错误。我希望为该政策设置翻译版本和伟大的答案,这不应该仍然抛出错误吗?noeviction是默认值。noeviction意味着当达到内存限制时,Redis将返回错误,并且客户端尝试执行可能导致使用更多内存的命令(大多数写命令,但DEL和一些其他异常)。@misterion Yep,看到了,评论过,将在今年的Redis Watch最新版本中出现。我也很喜欢这个博客的名字,我已经订阅了它,所以我不会错过任何东西:)