2012-04-03 9 views
22

Quando si utilizza Redis, mi dà l'errore:Redis con Resque e Rails: comando ERR non ammessi se usato memoria> 'maxmemory'

ERR command not allowed when used memory > 'maxmemory' 

Il comando info rivela:

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 

Is il valore used_memory è alto? Sono un completo noob rosso. Se è così, come si presenta questo problema e come dovrei procedere da qui? Questo stesso errore si verifica nella produzione (Heroku), quindi qualsiasi aiuto è molto apprezzato. Grazie.

risposta

29

Questo messaggio viene restituito quando è stato raggiunto il limite maxmemory. È possibile verificare il limite di corrente è quello di utilizzare il seguente comando:

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

Il risultato è in byte.

Nota un'istanza Redis vuota utilizza circa 710 KB di memoria (su Linux), quindi se si prevede di memorizzare solo 1 MB di dati utili e applicare questo limite, è necessario impostare 1734K nel parametro maxmemory. Nel file di configurazione, l'impostazione maxmemory è in byte, tranne se si utilizza un suffisso K, M, G.

Redis memorizza tutto in memoria (non riversa mai dati sul disco), quindi tutto il contenuto delle code Resque deve adattarsi. Alcuni MB sembrano molto bassi per un motore Resque.

Non hai specificato quale opzione di Heroku hai selezionato, ma il mio livello di comprensione è Redis To Go "nano" (quello gratuito) è 5 MB.

+0

Grazie uomo, abbiamo sicuramente bisogno di aggiornare la nostra To Go tier . – kmurph79

1

Grande risposta da Didier, queste sono solo le misure per aumentare esso:

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

Questo è il modo per modificarla:

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" 
Problemi correlati