Redis的数据应用及扩展①

1,370 阅读2分钟

「这是我参与11月更文挑战的第4天,活动详情查看:2021最后一次更文挑战

位图

  • 在很多中间件中也有应用到位图
    • 其不是一个新颖的数据结构,只是内部是bool类型实现的
    • 主要针对的标记📌是存储大量数据的时候,比如记录上线下线可以使用1和2代表
    • 当随着时间的累计数据量会不断增大,那么我们使用位去表示就可以bit

image.png

布隆过滤器

  • 对于位图的应用,布隆过滤器可谓是淋漓尽致
    • 布隆过滤器应用的场景很广,其原理是判断某值如果不存在那就一定不存在,如果存在是有可能存在的

    • 在布隆过滤器内部是使用多个hash()函数用来映射到位数组中

    • HashMap原理一样,每次putKey的时候会调用多个hash函数,来算一个索引值index最后取模到一个位数组的位置

    • 当想查看布隆过滤器中是否存在这个key时候,对调用多个hash函数,如果映射到的位置都是1那么可能存在这个key

    • 如果有一个映射到的位置中的位数组是0那么布隆过滤器中肯定不存在这个key

image.png

应用

  • 当我们做统计的时候,如果数据量特别大
    • 用其他类型显然是很消耗内存的,所以我们可以使用位图去存
    • 比如我们经常去做防止用户爬虫,将ip会存白名单和黑名单,我们可以黑名单存在位图中
    • 布隆过滤器只存储黑名单ip
    • 进行反向使用布隆过滤器的思想,如果每次判断的ip是黑还是白的时候,如果此ip不在布隆过滤器中那么一定是白名单
    • 因为布隆过滤器可以肯定的是映射到为0的一定不存在,所以类似的场景都可以使用布隆过滤器

image.png