在日常开发中,我们经常会遇到这样的问题:如何快速判断一个元素是否在一个超大集合中?比如,如何判断一个用户ID是否在黑名单中?如何防止恶意请求查询不存在的key导致数据库压力过大?
这里我将介绍Redis中一个非常实用的数据结构——布隆过滤器,它能够以极小的空间成本解决这类问题。
布隆过滤器是1970年由布隆提出的一种空间效率极高的概率型数据结构,主要用于判断一个元素是否存在于一个集合中。
你可以把它理解为一个不太精确的Set集合:当它说某个元素不存在时,那这个元素肯定不存在;但当它说某个元素存在时,这个元素可能存在,也有一定概率不存在。