Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 确定大型redis DB中未使用密钥的百分比_Database_Redis_Key_Ttl_Hyperloglog - Fatal编程技术网

Database 确定大型redis DB中未使用密钥的百分比

Database 确定大型redis DB中未使用密钥的百分比,database,redis,key,ttl,hyperloglog,Database,Redis,Key,Ttl,Hyperloglog,我有一个Redis数据库,里面有数百万个密钥。随着时间的推移,我写的和读的键都发生了变化,因此有很多键我不再使用了。大多数人也没有任何类型的TTL 我想了解一下Redis数据库中不再使用的键的百分比。我想我可以使用hyperloglog来估计正在写入的密钥数的基数,但是对于写入和读取的每个密钥,执行PFADD,似乎需要做很多工作 说清楚一点,我还不想删除任何内容,我只想对数据库中使用的键的数量进行一些分析 您可以使用时间窗口分析数据,并使用hyperloglog估计每个时间窗口的基数 例如,您可

我有一个Redis数据库,里面有数百万个密钥。随着时间的推移,我写的和读的键都发生了变化,因此有很多键我不再使用了。大多数人也没有任何类型的TTL

我想了解一下Redis数据库中不再使用的键的百分比。我想我可以使用hyperloglog来估计正在写入的密钥数的基数,但是对于写入和读取的每个密钥,执行
PFADD
,似乎需要做很多工作


说清楚一点,我还不想删除任何内容,我只想对数据库中使用的键的数量进行一些分析

您可以使用时间窗口分析数据,并使用
hyperloglog
估计每个时间窗口的基数

例如,您可以使用
hyperloglog
进行每天的分析:

// for each key that has been read or written in day1
// add it to the corresponding hyperloglog
pfadd key-count-day1 a b
pfadd key-count-day1 c d e

// for each key that has been read or written in day2
// add it to the corresponding hyperloglog
pfadd key-count-day2 a
pfadd key-count-day2 c
在这种情况下,您可以使用
hyperloglog
获取在dayN中活动的密钥的估计数量,其密钥为
key count dayN

使用
pfcount
,您可以获得每天或几天的活动密钥数

// number of active keys in day2: count2
pfcount key-count-day2

// number of active keys in day1 and day2: count-total
pfcount key-count-day1 key-count-day2

通过这两个计数,您可以计算自第2天起未使用的键的百分比:
(count total-count2)/count total
您可以使用时间窗口分析数据,并使用
hyperloglog
估计每个时间窗口的基数

例如,您可以使用
hyperloglog
进行每天的分析:

// for each key that has been read or written in day1
// add it to the corresponding hyperloglog
pfadd key-count-day1 a b
pfadd key-count-day1 c d e

// for each key that has been read or written in day2
// add it to the corresponding hyperloglog
pfadd key-count-day2 a
pfadd key-count-day2 c
在这种情况下,您可以使用
hyperloglog
获取在dayN中活动的密钥的估计数量,其密钥为
key count dayN

使用
pfcount
,您可以获得每天或几天的活动密钥数

// number of active keys in day2: count2
pfcount key-count-day2

// number of active keys in day1 and day2: count-total
pfcount key-count-day1 key-count-day2

通过这两个计数,您可以计算自第2天起未使用的键的百分比:
(count total-count2)/count total
我将从
扫描
命令开始遍历键,并在每个键上使用
object idletime
命令来收集自上次使用键以来的秒数。从那里,您可以根据自己的喜好生成度量

使用Redis的一种方法是使用一个排序集,其中键的空闲时间作为其分数。与HLL相比,这种方法的优点是,您可以使用
zrange
和/或
zrevrange
说“在x和y秒之前给我空闲的密钥”。然后,您可以将其结果用于删除、存档或设置TTL等操作。有了HLL,你不能这么做

另一个优点是,除非您将结果存储在Redis中,否则运行它时只需支付Redis成本。例如,在访问键时,不必修改代码来执行其他操作


如果我记得的话,物体空闲时间的准确度大约是10秒左右。但是为了了解在给定的时间范围内有多少键以及哪些键没有被访问,它应该可以正常工作

我将从
扫描
命令开始迭代键,并在每个键上使用
对象空闲时间
命令来收集自上次使用键以来的秒数。从那里,您可以根据自己的喜好生成度量

使用Redis的一种方法是使用一个排序集,其中键的空闲时间作为其分数。与HLL相比,这种方法的优点是,您可以使用
zrange
和/或
zrevrange
说“在x和y秒之前给我空闲的密钥”。然后,您可以将其结果用于删除、存档或设置TTL等操作。有了HLL,你不能这么做

另一个优点是,除非您将结果存储在Redis中,否则运行它时只需支付Redis成本。例如,在访问键时,不必修改代码来执行其他操作

如果我记得的话,物体空闲时间的准确度大约是10秒左右。但是为了了解在给定的时间范围内有多少键以及哪些键没有被访问,它应该可以正常工作