首先引出一个概念,击穿。

例如,在clien访问数据的时候,会走redis,查询没有后,会走数据库。当数据量过大的时候查询就比较消耗时间,当走到数据库突然发现没有这条数据,是不是就白白查询了一次,浪费时间的同时还没有查到数据,这样会加重数据库的负担。

由此就产生了bloom过滤器解决该问题,bloom的原理是将数据库的字段使用hash算法映射到一个redis二进制文件中,而redis的速度快,又是二进制文件操作,所以更快。

当发生查询操作的时候,将查询先去redis里bloom映射二进制文件里面匹配映射,如果有,再去数据库查询,如果没有直接返回。这样查询的出错率小于1%,有可能因为修改二进制文件产生击穿,也有可能正好恰巧匹配到了错误的数值没有去数据库查询。这样的错误率小于1%。

解决方法就是对这个字段添加一个key,让它直接能在redis中查到。

~~~~~~~~~~~~~~~~~~~~~~~~~~华丽分割线~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

安装bloom过滤器:

首先需要有wget,gcc。如果没有使用yum下载

#yum install wget

#yum install gcc

在~/usr目录下安装:(也可以自定义安装目录)

1、#wget https://github.com/RedisLabsModules/rebloom/archive/v2.2.6.tar.gz下载bloom

2、#cd RedisBloom-2.2.6 进入bloom目录

3、#make 编译

在编译完成后会出现一个redisbloom.so文件

4、修改redis的配置文件 #vi /etc/redis/6379.conf

在model中添加redisbloom.so文件文件的位置

添加完成后重启redis服务

使用#ps -ef | grep redis查询redis

使用#kill -9 (redis进程号)

使用配置文件启动redis#redis-server /etc/redis/6379.conf

进入redis测试

#redis-cli -p 6379

#bf.add key value (将value打入二进制文件)

#bf.exists key value (查询该value是否存在于二进制文件)

补充,如果想对字段进行判断 需要将所有字段打入bloom过滤器

Logo

欢迎加入DeepSeek 技术社区。在这里,你可以找到志同道合的朋友,共同探索AI技术的奥秘。

更多推荐