布隆过滤器--推荐系统去重
使用场景
我们在使用新闻客户端看新闻时,它会给我们不停地推荐新的内容,它每次推荐时要去重,去掉那些已经看过的内容。
基本思路1
服务器记录了用户看过的所有历史记录,当推荐系统推荐新闻时会从每个用户的历史记录里进行筛选,过滤掉那些已经存在的记录。但当用户量很大、每个用户看过的新闻又很多的情况下,去重就需要频繁地对数据库中每个用户的历史记录表进行 exists 查询,在高并发情况下非常影响系统性能。
基本思路2
使用缓存,将每个用户的历史浏览记录缓存起来,虽然查询速度提高了,但这需要耗费大量的内存。
Redis布隆过滤器实现思路
布隆过滤器相当于一个Redis中不精确的Set,它有exists方法判断某元素是否在集合中。通过设置其参数来确定精度,从而设置误判概率。当布隆过滤器说某个值存在时,这个值可能不存在;当它说不存在时,那就肯定不存在。也就是说,推荐系统认为该用户浏览过某条新闻时,用户实际上可能有小概率并没有浏览过这条新闻,但系统认为该用户没有浏览过某条新闻,用户一定没有浏览过这条新闻。这样就能确保用户一定不会浏览重复的内容。
基本指令
bf.add key value //往集合中添加元素(集合名 值)
bf.madd key value1 value2 value3 //往集合中添加多个元素(集合名 值1 值2 值3)
bf.exists key value //判断集合中是否存在该元素(集合名 值)
bf.mexists ke