vlambda博客
学习文章列表

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

每天一个开发小知识。

在 一文中,我们提到使用  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/shfor((i=1;i<=50000;++i))do    echo "hset test_key "$i" "$i | redis-cli -h 127.0.0.1 -p 7100done

通过 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 命令会影响线上服务。

每天一个开发小知识,今天你学废了吗?