如何在Node.js中获取Redis连接数?

4

有没有办法检查当前连接到 Redis 数据库的连接数?

const redis = require('redis');

var client = redis.createClient(port, host);

client.on('connect', () => {
  //Display how many current connections are to Redis
  console.log( numberOfRedisClients );
});
2个回答

3
根据Redis文档,尝试以下操作:
const Redis = require("ioredis");
let client =  new Redis();
async function my_function(){
  console.log(await client.send_command('CLIENT', 'LIST'))

}

输出:

id=24 addr=127.0.0.1:47962 fd=8 name= age=0 idle=0 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=0 obl=0 oll=0 omem=0 events=r cmd=info
id=25 addr=127.0.0.1:47964 fd=9 name= age=0 idle=0 flags=P db=0 sub=1 psub=0 multi=-1 qbuf=0 qbuf-free=32768 obl=0 oll=0 omem=0 events=r cmd=subscribe
id=26 addr=127.0.0.1:47966 fd=10 name= age=0 idle=0 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=26 qbuf-free=32742 obl=0 oll=0 omem=0 events=r cmd=client

我添加了一个函数,它逐个字母地遍历字符串,并将“客户端”的数量累加到一个数字中。看起来有点笨拙和过度,但如果没有其他办法,我想这样做就只能了。 - Vardan Betikyan

3
CLIENT LIST 命令以大部分易读的方式返回有关客户端连接服务器的信息和统计数据,正如 @babak 在答案中所述。
如果您只需要获取 总连接数,则可以使用 INFO 命令。 INFO clients 将打印类似于此内容,而 connected_clients 就是您要查找的内容。
# Clients
connected_clients:2
client_recent_max_input_buffer:8
client_recent_max_output_buffer:0
blocked_clients:0
tracking_clients:0
clients_in_timeout_table:0

以下代码可以完成工作:
const Redis = require("ioredis");
const redis = new Redis();

async function clients() {
    console.log(await redis.info('clients'));
}

clients();

2
谢谢,我不知道redis.info('clients')也可以工作。 - Babak Abadkheir
1
@VardanBetikyan 我在3个不同的生产Redis集群上进行了测试,以查看它(所有集群都有超过200个活动客户端连接)-这不是自开始以来的总数。此外,这个答案也证实了这一点 https://stackoverflow.com/questions/58847716/what-is-the-difference-of-redis-client-list-with-connected-client-from-info - Ersoy
2
@VardanBetikyan,此外,“info stats”命令将打印统计信息,并有一行称为“total_connections_received”,它是“服务器接受的连接总数”。您所指的可能就是这个。在我的情况下,它是“478317479”。 - Ersoy
1
connected_clients 排除副本连接 - 因此方程式可以是(info clients 中的总行数 - connected_slaves(您可以从 info replication 中获取)= connected_clients)。@VardanBetikyan - Ersoy
1
我已经重启了Redis服务器并使用了flushall,但仍然出现相同的问题。cmd=client计数是正确的。尽管connected_clients也将其他cmd类型(info、subscribe、NULL)计算为客户端连接。 - Vardan Betikyan
显示剩余6条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接