暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

redis-memory-for-key 会影响线上服务对 Redis 的读写吗?

每天一个开发小知识。

《如何查看 Redis 中指定 key 的大小》一文中,我们提到使用 redis-memory-for-key 命令查看指定 key 的大小:

    redis-memory-for-key -s host -p port -a passwd yourkey
    复制

    当时,我们还注意到:

    当我们通过 redis-memory-for-key 查询一个内存过大的 key 时,命令执行很久。


    由于,我不确定这个命令是否会阻塞 Redis,所以,我立即终止了这个大 key 的查询,怕影响线上服务。


    今天,我就在测试环境验证一下,当使用 redis-memory-for-key 查询一个内存过大的 key 时,是否会阻塞整个 Redis?


    首先,编写一个 Shell 脚本,制造一个内存大的 key 出来:


      #!/bin/sh
      for((i=1;i<=50000;++i))
      do
          echo "hset test_key "$i" "$i | redis-cli -h 127.0.0.1 -p 7100
      done
      复制

      通过 redis-memory-for-key 可以知道这个 key 的大小为 1986580.0 字节。

      然后,我们在一个客户端运行 redis-memory-for-key 命令:

        redis-memory-for-key -s 127.0.0.1 -p 7100 test_key
        复制

        同时,在 redis-memory-for-key 运行结束之前,在另一个客户端运行正常的读命令:

          hget test_key 1000
          复制

          这时我们发现,hget 命令先于 redis-memory-for-key 命令结束,也就是说,redis-memory-for-key 命令并没有阻塞 Redis

          所以,今后我们再使用 redis-memory-for-key 命令时,大胆去用,不用担心 redis-memory-for-key 命令会影响线上服务。

          每天一个开发小知识,今天你学废了吗?
          文章转载自每天一个开发小知识,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

          评论