zoukankan      html  css  js  c++  java
  • Redis 详解---布隆过滤器

    在面试Redis 相关的知识,总会问道缓存穿透、缓存击穿、缓存雪崩 ,首先解释下三者的含义以及区别

    缓存穿透

    查询数据库一定不存在的数据,那么此类的查询一般恶意的查询,缓存一不存在该类数据,大量的查询会导致数据库负荷

    缓存击穿

    针对某个热点数据访问量极高,某个时点热点数据缓存失效,就会导致大量的请求查询数据

    缓存雪崩

    某个时间点缓存集体失效

    不同的问题有不同的解决方案,针对缓存穿透,普遍的解决方案是采用布隆过滤器

    什么是布隆过滤器

    布隆过滤器,由一串很长的二进制向量组成,可以看作二进制数组,里面存的值 0 或者 1 ,实现的原理,当向数据库添加数据时,通过多个 hash 函数,计算

    出不同的值,在二进制数组中对应的未知将值置为 1 ,以此类推

    如何判断数据是否存在

    通过添加的hash 函数再次计算值对应的位置,判断这些位置中的值是否存在 0 (注意:这里判断不是全为1 )

    如果存在至少一个0 ,则数据一定不存在于数据库

    如果全部的值为 1 ,则无法判断数据是否存在

    由于布隆过滤器的存储特性,当数据被删除时,无法重置对应位置的值为0(多个数据互相影响)

    Redis  实现布隆过滤器 bigmaps

    计算机底层存储的基础单位是字节,一个字节8位,将 “big”字符串存储,使用 ASCII 98、105、103 存储如下

     在Redis ,Bitmaps 提供了一套命令来操作二进制中的位

     将k1 第七位置为1 (下标从 0 开始),即第一个字符对应的码值加1 

    Redisssion 

    Redis 实现布隆过滤器底层就是通过 bitmap 数据结构,使用比较广的客户端工具 Redission 

    Guava 工具

    google 工具包 guava 提供了布隆过滤器的实现

    布隆过滤器:https://www.cnblogs.com/ysocean/p/12594982.html

    布隆过滤器:https://blog.csdn.net/chenssy/article/details/110102364

  • 相关阅读:
    Problem 3
    Problem 2
    Problem 1
    Python基础 装饰器
    算法——狄克斯特拉算法
    A Knight's Journey POJ 2488
    多校10 1007 CRB and Queries
    多校9 1007 Travelling Salesman Problem
    多校8 1008 Clock
    多校7 1005 The shortest problem
  • 原文地址:https://www.cnblogs.com/bytecodebuffer/p/14358564.html
Copyright © 2011-2022 走看看