Redis с Resque и Rails: команда ERR не разрешена, когда используется память> 'maxmemory' - PullRequest
22 голосов
/ 03 апреля 2012

При использовании redis выдает ошибку:

ERR command not allowed when used memory > 'maxmemory'

Команда info показывает:

redis 127.0.0.1:6379> info
redis_version:2.4.10
redis_git_sha1:00000000
redis_git_dirty:0
arch_bits:64
multiplexing_api:kqueue
gcc_version:4.2.1
process_id:1881
uptime_in_seconds:116
uptime_in_days:0
lru_clock:1222663
used_cpu_sys:0.04
used_cpu_user:0.04
used_cpu_sys_children:0.00
used_cpu_user_children:0.00
connected_clients:1
connected_slaves:0
client_longest_output_list:0
client_biggest_input_buf:0
blocked_clients:0
used_memory:930912
used_memory_human:909.09K
used_memory_rss:1269760
used_memory_peak:931408
used_memory_peak_human:909.58K
mem_fragmentation_ratio:1.36
mem_allocator:libc
loading:0
aof_enabled:0
changes_since_last_save:4
bgsave_in_progress:0
last_save_time:1333432389
bgrewriteaof_in_progress:0
total_connections_received:1
total_commands_processed:2
expired_keys:0
evicted_keys:0
keyspace_hits:0
keyspace_misses:0
pubsub_channels:0
pubsub_patterns:0
latest_fork_usec:0
vm_enabled:0
role:master

Высокое значение used_memory? Я полный Redis Noob. Если да, то как возникает эта проблема и как мне действовать дальше? Эта та же самая ошибка встречается в производстве (Heroku), поэтому любая помощь очень ценится. Спасибо.

Ответы [ 2 ]

29 голосов
/ 03 апреля 2012

Это сообщение возвращается, когда достигнут максимальный предел памяти. Вы можете проверить текущий предел, используя следующую команду:

redis 127.0.0.1:6379> config get maxmemory
1) "maxmemory"
2) "128000000"

Результат в байтах.

Обратите внимание, что пустой экземпляр Redis использует около 710 КБ памяти (в Linux), поэтому, если вы планируете хранить только 1 МБ полезных данных и применяете этот лимит, вам необходимо установить 1734 КБ в параметре maxmemory. В файле конфигурации параметр maxmemory указывается в байтах, кроме случаев, когда вы используете суффикс K, M, G.

Redis хранит все в памяти (он никогда не проливает данные на диск), поэтому все содержимое ваших очередей Resque должно соответствовать. Несколько МБ кажутся очень маленькими для двигателя Resque.

Вы не указали, какую опцию Heroku вы выбрали, но, насколько я понимаю, Redis To Go (нано) опция (бесплатная) ограничена 5 МБ.

1 голос
/ 11 апреля 2016

Отличный ответ от Didier, это только шаги, чтобы увеличить его:

redis-cli
127.0.0.1:6379> config get maxmemory
1) "maxmemory"
2) "67108864" # (67mb) this will be different in your case

Вот как это изменить:

127.0.0.1:6379> config set maxmemory 100mb
OK
127.0.0.1:6379> config set maxmemory-policy allkeys-lru
OK
127.0.0.1:6379> config get maxmemory
1) "maxmemory"
2) "104857600"
...