我的一个Python Redis客户端因以下异常而失败:
redis.exceptions.ResponseError:MISCONF Redis配置为保存RDB快照,但目前无法在磁盘上保留。可以修改可能修改数据集的命令。请检查Redis日志以获取有关错误的详细信息。
我检查过redis机器,它似乎是内存不足:
free
total used free shared buffers cached
Mem: 3952 3656 295 0 1 9
-/+ buffers/cache: 3645 306
Swap: 0 0 0
top
top - 15:35:03 up 14:09, 1 user, load average: 0.06, 0.17, 0.16
Tasks: 114 total, 2 running, 112 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.2 us, 0.3 sy, 0.0 ni, 99.3 id, 0.0 wa, 0.0 hi, 0.0 si, 0.2 st
KiB Mem: 4046852 total, 3746772 used, 300080 free, 1668 buffers
KiB Swap: 0 total, 0 used, 0 free. 11364 cached Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1102 root 20 0 3678836 3.485g 736 S 1.3 90.3 10:12.53 redis-server
1332 ubuntu 20 0 41196 3096 972 S 0.0 0.1 0:00.12 zsh
676 root 20 0 10216 2292 0 S 0.0 0.1 0:00.03 dhclient
850 syslog 20 0 255836 2288 124 S 0.0 0.1 0:00.39 rsyslogd
我在一个Redis实例中使用了几十个Redis DB。每个DB由给予redis-cli
的数字id表示,例如:
$ redis-cli -n 80
127.0.0.1:6379[80]>
我如何知道每个数据库消耗多少内存,以及每个数据库中最大的密钥是什么?
答案 0 :(得分:1)
我如何知道每个数据库消耗多少内存,以及每个数据库中最大的密钥是什么?
您无法获得每个数据库的已用内存。使用INFO
命令,您只能获得Redis实例的完全使用的内存。每次动态分配一些内存时,Redis都会记录新分配的内存大小。但是,它并没有为每个DB做这样的记录。此外,它没有最大键的任何记录。
通常,您应该使用maxmemory
和maxmemory-policy
配置Redis实例(即达到maxmemory时的驱逐政策)。
答案 1 :(得分:1)
您可以这样编写一些sh脚本(在每个DB中显示元素计数):
#!/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
我知道我们可以拥有一个带有大键的数据库,但是无论如何,在某些情况下,该脚本可以提供帮助。