我们现在就是Redis

了解更多

Redis最佳实践

超对数

独特的项目可能难以计数。通常这意味着存储每个独特的项目,然后以某种方式调用这些信息。对于Redis,这可以通过使用一个集合和一个命令来实现,但是对于非常大的集合,其存储和时间复杂性都是令人望而却步的。HyperLogLog提供了一种概率替代方案。

HyperLogLog在内部类似于Bloom过滤器,因为它通过非加密散列运行项,并以位字段的形式设置位。与Bloom筛选器不同,HyperLogLog保留一个计数器,当添加以前未添加的新项时,计数器会递增。这在估计集合的唯一项(基数)时提供了非常低的错误率。HyperLogLog直接内置在Redis中。

Redis中有三个HyperLogLog命令:PFADD,PFCOUNTPFMERGE. 假设您正在构建一个web爬虫程序,并且希望估计页面在给定的一天内已爬网的唯一URL的数量。对于每个页面,您都会运行如下命令:

>PFADD爬网:20171124“http://www.google.com/"(整数)1>PFADD爬网:20171124“//www.szfbf.com/"(整数)1>PFADD爬网:20171124“http://www.redis.io/"(整数)1>PFADD爬网:20171125“http://www.redisearch.io/"(整数)1>PFADD爬网:20171125“http://www.redis.io/"(整数)1

上面的每个键都按天编制索引。要查看2017-11-24上爬网了多少页面,我们将运行以下命令:

>已爬网的PFCOUNT:20171124(整数)3

为了查看2017-11-24和2017-11-25上有多少页面被爬网,我们将使用PFMERGE生成两个计数并集的新密钥。请注意,由于http://redis.io/ 已添加到两个关键点,但不会计数两次:

>PFMERGE爬网:20171124-25爬网:20171124爬网:20171125好啊>已爬网的PFCOUNT:20171124-25(整数)4

这是一个多密钥操作,因此在分片环境中要小心,以确保您的密钥最终位于同一个分片上。

Baidu