项目简介
包含一个基于Redis的布隆过滤器的实现,以及应用到Scrapy中的Demo。
布隆过滤器
网上有很多介绍,推荐《数学之美》,介绍的很详尽,此处不再赘述。
哈希函数
布隆过滤器中需要n个哈希函数,我使用的是Arash Partow提供的常见哈希函数。
建立在Redis上的布隆过滤器
Redis中有一个数据结构叫做Bitmap(下方有官网详解),它提供一个最大长度为512MB(2^32)的位数组。我们可以把它提供给布隆过滤器做位数组。
根据《数学之美》中给出的数据,在使用8个哈希函数的情况下,512MB大小的位数组在误报率万分之五的情况下可以对约两亿的url去重。而若单纯的使用set()去重的话,以一个url64个字节记,两亿url约需要128GB的内存空间,不敢想象。
我使用的策略是使用哈希函数算出的哈希值对2^32取模,填入bitmap中。