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