zoukankan      html  css  js  c++  java
  • 加载布隆过滤器模块

    在搭建redis服务的基础上:https://www.cnblogs.com/gabin/p/13652357.html

    一、从官网找到module,https://redis.io/modules

    二、布隆过滤器源码:https://github.com/RedisBloom/RedisBloom

    三、下载源码,并在目录下make编译

    四、将编译好的文件:redisbloom.so移到自己喜欢的位置,我放到了redis的可执行目录

    五、在redis的配置文件中增加(请注意绝对地址):

    loadmodule /opt/redis/redis6/redisbloom.so

    六、重启redis服务

    使用方式:

    • 创建一个过滤器,并增加一个值
    • 判断这个值是否存在(请注意布隆过滤器的效果是,可以判断一定不存在,但是不能判断一定存在)

         原理大概是:

            1、通过映射算法,算出对应6或8位

            2、将对应6和8位设置到bitmap中对应的偏移位中

            3、根据第二点,如果一个key算出来的位值和其他key重复,则可能出现冲突

            4、由于判断存在是根据映射算法,去到对应的bitmap中查看对应是否有值,只要其中一个位值为0,则一定不存在;但是所有位值为1,并不能代表一定存在

          比如:

            key1算出来, 100 200 300 400 500

            key2算出来, 100 201 300 401 500

            key3算出来, 101 200 301 400 501

          那么如果此时key1不存在,key2和key3存在;这个时候BF.EXISTS key1是存在还是不存在呢?

          答案是存在:因为key2和key3的并集正好包含了key1

          可是实际上key1存在吗?

          答案是:不存在!

    另外注意下,这边的布隆过滤器不是用来过滤redis,而是用来过滤数据库(如mysql)。术语的话,就是用来解决缓存击穿问题的,也就是说redis缓存中不存在,但是数据库缓存也不存在的。

    这个时候,其实我们是不希望查询数据库的,所以我们提前将mysql中的key是否有值,设置到redis的布隆过滤器中;也就可以在我们将要查询mysql的时候,先提前判断是否不存在,不存在则不去执行mysql数据库查询

  • 相关阅读:
    dynamic_cast
    struct 字节对齐详解
    CentOS修改系统的默认启动模式为命令号界面
    linux系统备份还原
    linux 缺少libxxx.a 静态链接库
    linux下SVN忽略文件/文件夹的方法
    取消svn add
    centos 中文乱码解决办法2
    安装rpm包时遇到error: Failed dependencies:错误
    Linux rpm 命令参数使用详解[介绍和应用]
  • 原文地址:https://www.cnblogs.com/gabin/p/13663898.html
Copyright © 2011-2022 走看看