2012-04-03 5 views
22

Wenn redis verwenden, ist es mir den Fehler gibt:Redis mit Resque und Rails: ERR Befehl nicht, wenn verwendet Speicher erlaubt> 'MaxMemory'

ERR command not allowed when used memory > 'maxmemory' 

Der Info-Befehl zeigt:

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 

Ist der gebrauchte_speicher hoch? Ich bin ein vollständiger Neuling. Wenn ja, wie tritt dieses Problem auf und wie soll ich von hier ausgehen? Dieser Fehler tritt alle in der Produktion auf (Heroku), daher wird jede Hilfe sehr geschätzt. Vielen Dank.

Antwort

29

Diese Nachricht wird zurückgegeben, wenn das Limit maxmemory erreicht wurde. können Sie überprüfen, was die Strombegrenzung ist durch den folgenden Befehl:

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

Das Ergebnis in Byte.

Bitte beachten Sie, dass eine leere Redis-Instanz etwa 710 KB Speicher (unter Linux) verwendet. Wenn Sie also nur 1 MB an nützlichen Daten speichern und dieses Limit durchsetzen möchten, müssen Sie 1734K im Parameter maxmemory setzen. In der Konfigurationsdatei ist die Einstellung von maxmemory in Bytes, außer wenn Sie ein K, M, G-Suffix verwenden.

Redis speichert alles im Speicher (es verschüttet nie Daten auf der Festplatte), also muss der gesamte Inhalt Ihrer Resque-Warteschlangen passen. Ein paar MB scheinen sehr niedrig für eine Resque-Engine.

Sie haben nicht angegeben, welche Heroku-Option Sie ausgewählt haben, aber mein Verständnis ist Redis To Go "Nano" -Option (die freie) Grenze ist 5 MB.

+0

Dank Mann, wir auf jeden Fall unsere benötigt ein Upgrade Tier To Go . – kmurph79

1

Große Antwort von Didier, das sind nur die Schritte, um es zu vergrößern:

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

Dies wird, wie es ändern:

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"