作为分布式爬虫的一部分,我们将所有 URL 存储在Redis 排序集中,这是爬取队列和Redis 哈希(用于去重复和标记访问的 URL)。
我们在一个文件中拥有大约 1100 万个我们希望访问的各个域的 URL,该文件占用了506 MB 的磁盘空间。
但是,当放入Redis 排序集时,相同的 URL 集(优先级从整数 11M 一直到 0 递减)占用 1.759 GB 的 RAM,而Redis 哈希来自键:URL-> 值:相同的 URL,占用 2.048 GB RAM 空间。
redis 服务器托管在 AWS 的高内存 (17GB) 超大型 EC2 实例中。
我想弄清楚是什么导致了 Redis 中的空间膨胀,可能是因为存储它们的方式效率低下,还是我们应该以某种方式优化内存以避免空间膨胀?任何提高内存性能的建议都是 gr8。提前感谢您的帮助!
这是 redis 信息转储:
redis_version:2.4.14
redis_git_sha1:00000000
redis_git_dirty:0
arch_bits:64
multiplexing_api:epoll
gcc_version:4.6.3
process_id:739
uptime_in_seconds:329647
uptime_in_days:3
lru_clock:1603627
used_cpu_sys:9521.58
used_cpu_user:3165.06
used_cpu_sys_children:19535.11
used_cpu_user_children:126500.32
connected_clients:76
connected_slaves:0
client_longest_output_list:0
client_biggest_input_buf:0
blocked_clients:0
used_memory:12794713864
used_memory_human:11.92G
used_memory_rss:13586632704
used_memory_peak:16575849280
used_memory_peak_human:15.44G
mem_fragmentation_ratio:1.06
mem_allocator:jemalloc-2.2.5
loading:0
aof_enabled:0
changes_since_last_save:46321
bgsave_in_progress:1
last_save_time:1358213403
bgrewriteaof_in_progress:0
total_connections_received:1702
total_commands_processed:95112145
expired_keys:3488037
evicted_keys:0
keyspace_hits:43443780
keyspace_misses:38945
pubsub_channels:2
pubsub_patterns:0
latest_fork_usec:3820832
vm_enabled:0
role:master
db0:keys=116,expires=25