Redis慢速日志显示问题?

时间:2016-05-26 19:58:04

标签: redis

我对Redis很新,所以如果这个问题太基础,我会事先道歉。

我在我的应用程序中的2个位置使用Redis。

  1. 我使用了两个redis键,只使用它们,但这种情况多次发生,而且经常发生,大约10-20次。
  2. 在一个完全不同的区域,我使用更复杂的集合和哈希。实施需要数千个项目,但不是非常频繁,每天几次,而且这里的延迟不太重要。
  3. 这是1天后的慢速日志:

    enter image description here

    信息显示我有很多连接

    redis_version:2.4.10
    redis_git_sha1:00000000
    redis_git_dirty:0
    arch_bits:64
    multiplexing_api:epoll
    gcc_version:4.4.6
    process_id:1769
    uptime_in_seconds:190693
    uptime_in_days:2
    lru_clock:1725649
    used_cpu_sys:386.48
    used_cpu_user:200.63
    used_cpu_sys_children:3.19
    used_cpu_user_children:4.76
    connected_clients:12
    connected_slaves:0
    client_longest_output_list:0
    client_biggest_input_buf:0
    blocked_clients:0
    used_memory:6551904
    used_memory_human:6.25M
    used_memory_rss:22675456
    used_memory_peak:7991472
    used_memory_peak_human:7.62M
    mem_fragmentation_ratio:3.46
    mem_allocator:jemalloc-2.2.5
    loading:0
    aof_enabled:0
    changes_since_last_save:62
    bgsave_in_progress:0
    last_save_time:1464291307
    bgrewriteaof_in_progress:0
    total_connections_received:222528
    total_commands_processed:2635087
    expired_keys:29
    evicted_keys:0
    keyspace_hits:12056
    keyspace_misses:1465
    pubsub_channels:0
    pubsub_patterns:0
    latest_fork_usec:1309
    vm_enabled:0
    role:master
    db0:keys=64,expires=2
    

    我检查了代码,但我没有看到为什么我有这么多联系的原因。大多数用法是从单个文件完成的,该文件仅实例化一次redis连接。这个文件每天可能被调用几千次。

    我想要理解我是否应该担心这一点,如果有什么我应该在实施中做不同的事情。

    1. 如果我将这两个部分放在不同的redis DB中,它会有什么不同吗?
    2. 根据我在slowlog中的理解,incr命令中的延迟发生在HMSET(和INFO命令)期间。假设我需要处理> 10K项的集合,有没有办法避免或最小化关键INCR命令的延迟?
    3. 这些慢速命令是否与大量连接有关?
    4. 我害怕在应用程序的更多部分中进一步使用redis,以防我损害已经工作的那些功能的性能。

      任何建议我应该检查什么以进一步分析这将是非常欢迎

1 个答案:

答案 0 :(得分:3)

在回答之前,很难澄清一些事情。

  • Redis是单线程的。即使您点击并行请求,它也会逐个处理。其他人会等
  • INCR命令并不重,除非直到,否则它不会出现在慢速日志中 它等待被执行或阻止。
  • Hmset肯定很重,有> 10 K项,这将是阻塞。

您的问题的答案:

  1. 如果我将这两个部分放在不同的redis DB中,它会有什么不同吗?
  2.   

    不,不会。它与您的方案中的负载无关。

    1. 根据我在slowlog中的理解,incr中的延迟 命令发生在HMSET(和INFO命令)期间。假设 我需要处理> 10K项目的集合,有什么办法吗? 避免或最小化关键INCR命令的延迟?
    2.   

      延迟取决于系统中的负载。关键的是在负载期间发生的那些。你无法控制那里。

      1. 这些慢速命令是否与大量命令有关 连接吗?
      2.   

        单独的实时连接数量。每个同时执行的10个实时连接和100个实时连接之间存在差异。

        解决方案: HMSET命令是这里的瓶颈,因为它们是阻塞的。不是将HMSET用于大于10K的元素,而是将它们分成100或数千的倍数。尝试使用不同的数字并找到最佳数字并修复该数字。同时升级到更高版本的redis,这将比以前更好。

        p.s:Info命令在你的屏幕截图中需要1750秒,这似乎很不寻常。