5、redis之bloom(布隆)过滤器
redis之bloom过滤器(解决击穿)
首先引出一个概念,击穿。
例如,在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过滤器
更多推荐
所有评论(0)