带有Resque和Rails的Redis:当使用的内存时不允许使用ERR命令> 'maxmemory'

时间:2012-04-03 05:58:48

标签: ruby-on-rails-3 redis resque

使用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)中,因此非常感谢任何帮助。谢谢。

1 个答案:

答案 0 :(得分:29)

达到maxmemory限制时会返回此消息。 您可以使用以下命令检查当前限制:

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

结果以字节为单位。

请注意,一个空的Redis实例使用大约710KB的内存(在Linux上),因此如果您计划仅存储1MB的有用数据并强制执行此限制,则需要在maxmemory参数中设置1734K。在配置文件中,maxmemory设置以字节为单位,除非您使用K,M,G后缀。

Redis将所有内容存储在内存中(它永远不会将数据泄露到磁盘上),因此Resque队列的所有内容都必须适合。对于Resque引擎来说,几MB似乎非常低。

您没有指定您选择的Heroku选项,但我的理解是Redis To Go“nano”选项(免费版)限制为5 MB。