我正在Windows上运行Redis,并注意到redis-server.exe
的大小随着时间的推移而减少。当我打开Redis时,它从转储文件中读取并将所有散列的键值加载到内存中,大约 1.4 GB 。但是,随着时间的推移,redis-server.exe
占用的内存量会减少。我已经看到它低于 100 MB 。
我能看到这种情况发生的唯一原因是密钥到期并留下内存,但我已将Redis设置为永不过期。我也确保我已经给了足够的记忆。
我的一些设置包括:
maxmemory 2gb
maxmemory-policy noeviction
hash-max-zipmap-entries 512
hash-max-zipmap-value 64
activerehashing no
如果感兴趣,当我第一次将密钥加载到Redis中时,我是通过Python完成的:
r.hset(key, field, value)
任何帮助将不胜感激。我希望钥匙永远存在。
这是我第一次运行它后立即从INFO命令输出的信息:
redis 127.0.0.1:6379> INFO
redis_version:2.4.6
redis_git_sha1:26cdd13a
redis_git_dirty:0
arch_bits:64
multiplexing_api:winsock2
gcc_version:4.6.1
process_id:9092
uptime_in_seconds:69
uptime_in_days:0
lru_clock:248011
used_cpu_sys:3.34
used_cpu_user:10.06
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:1129560232
used_memory_human:1.05G
used_memory_rss:1129560232
used_memory_peak:1129560144
used_memory_peak_human:1.05G
mem_fragmentation_ratio:1.00
mem_allocator:libc
loading:0
aof_enabled:0
changes_since_last_save:0
bgsave_in_progress:0
last_save_time:1386600366
bgrewriteaof_in_progress:0
total_connections_received:1
total_commands_processed:0
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
db0:keys=4007989,expires=0
当我在Windows任务管理器中发现内存减少后运行它时,没有太多差异:
uptime_in_seconds:4412 (from 69)
lru_clock:248445 (from 248011)
used_cpu_sys:4.59 (from 3.34)
used_cpu_user:10.25 (from 10.06)
used_memory:1129561240 (from 1129560232)
used_memory_human:1.05G (same!)
used_memory_rss:1129561240 (from 1129560232)
used_memory_peak:1129568960 (from 1129560144)
used_memory_peak_human:1.05G (same!)
mem_fragmentation_ratio:1.00 (same!)
last_save_time:1386600366 (same!)
total_connections_received:4 (from 1)
total_commands_processed:10 (from 0)
expired_keys:0 (same!)
evicted_keys:0 (same!)
keyspace_hits:0 (same!)
keyspace_misses:2 (from 0)
当内存大小较低时,查找需要更长时间。这是怎么回事?
答案 0 :(得分:0)
del
命令执行grep以确保)答案 1 :(得分:0)
Redis通常运行单个进程来管理内存中的数据。但是,当数据持久保存到RDB文件时,第二个进程开始保存所有数据。在此过程中,您可以看到内存使用量增加到数据集大小的两倍。
我熟悉它是如何在linux中完成的,但我不知道有关windows端口的详细信息,所以你看到的大小差异可能是因为第二个进程是定期启动的?如果是这种情况,您可以通过在redis中发出BGSAVE命令轻松尝试。这将在后台启动数据与RDB的同步,因此您可以查看内存使用模式是否是您观察到的模式。
如果是这种情况,那么你已经知道发生了什么:)
祝你好运