Memory 查找每个redis DB的内存消耗 问题

Memory 查找每个redis DB的内存消耗 问题,memory,redis,Memory,Redis,我的一个Python Redis客户端失败,出现以下异常: redis.exceptions.ResponseError:Reconf redis配置为保存RDB快照,但当前无法在磁盘上持久化。将禁用可能修改数据集的命令。有关错误的详细信息,请查看Redis日志 我已经检查了redis机器,它似乎内存不足: 免费 top 我在一个Redis实例中使用了几十个Redis数据库。每个DB由给定给redis cli的数字ID表示,例如: $ redis-cli -n 80 127.0.0.1:6379

我的一个Python Redis客户端失败,出现以下异常:

redis.exceptions.ResponseError:Reconf redis配置为保存RDB快照,但当前无法在磁盘上持久化。将禁用可能修改数据集的命令。有关错误的详细信息,请查看Redis日志

我已经检查了redis机器,它似乎内存不足:

免费
top
我在一个Redis实例中使用了几十个Redis数据库。每个DB由给定给redis cli的数字ID表示,例如:

$ redis-cli -n 80
127.0.0.1:6379[80]>
如何知道每个数据库消耗多少内存,以及每个数据库中最大的键是什么?

我如何知道每个数据库消耗多少内存,每个数据库中最大的键是什么

无法获取每个数据库的已用内存。使用
INFO
命令,您只能获取Redis实例的全部已用内存。Redis每次动态分配一些内存时,都会记录新分配的内存大小。然而,它并没有为每个DB做这样的记录。而且,它没有任何最大键的记录


通常,您应该使用
maxmemory
maxmemory策略
配置您的Redis实例(即当达到maxmemory时的逐出策略)。

您可以这样编写一些sh脚本(在每个DB中显示元素计数):

示例输出:

db_nubner: 0
(integer) 71
db_nubner: 1
(integer) 0
db_nubner: 2
(integer) 1
db_nubner: 3
(integer) 1
db_nubner: 4
(integer) 0
db_nubner: 5
(integer) 1
db_nubner: 6
(integer) 28
db_nubner: 7
(integer) 1
我知道我们可以有一个带有大密钥的单数据库,但无论如何,在某些情况下,这个脚本会有所帮助

$ redis-cli -n 80
127.0.0.1:6379[80]>
#!/bin/bash
max_db=501

i=0

while  [ $i -lt $max_db ]
do
echo "db_nubner: $i"
redis-cli -n $i dbsize
i=$((i+1))
done
db_nubner: 0
(integer) 71
db_nubner: 1
(integer) 0
db_nubner: 2
(integer) 1
db_nubner: 3
(integer) 1
db_nubner: 4
(integer) 0
db_nubner: 5
(integer) 1
db_nubner: 6
(integer) 28
db_nubner: 7
(integer) 1