SpringBoot + Redis布隆过滤器拦截无效请求
简述
关于布隆过滤器的详细介绍,我在这里就不再赘述一遍了,不了解的可以移步BloomFilter 布隆过滤器-简述
本文重点是在 springboot 中使用 redis 的布隆过滤器
我们首先知道:BloomFilter使用长度为m bit的字节数组,使用k个hash函数,增加一个元素: 通过k次hash将元素映射到字节数组中k个位置中,并设置对应位置的字节为1。查询元素是否存在: 将元素k次hash得到k个位置,如果对应k个位置的bit是1则认为存在,反之则认为不存在。
Guava 中已经有具体的实现,而在我们实际生产环境中,本地的存储往往无法满足我们实际的 需求。这时候就需要我们使用 redis 了。
Redis 安装 Bloom Filter
git clone https://github.com/RedisLabsModules/redisbloom.git
cd redisbloom
make # 编译
vi redis.conf
## 增加配置
loadmodule /usr/local/web/redis/RedisBloom-1.1.1/rebloom.so
##redis 重启
#关闭
./redis-cli -h 127.0.0.1 -p 6379 shutdown
#启动
./redis-server ../redis.conf &
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3elNy988-1590546665255)(/Users/toner/Library/Application Support/typora-user-images/image-20200526194657530.png)]
基本指令
#创建布隆过滤器,并设置一个期望的错误率和初始大小
bf.reserve userid 0.01 100000
#往过滤器中添加元素
bf.add userid '181920'
#判断指定key的value是否在bloomfilter里存在,存在:返回1,不存在:返回0
bf.exists userid '101310299'
结合 SpingBoot
搭建一个简单的 springboot 框架
方式一
配置
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.bloom</groupId>
<artifactId>test-bloomfilter</artifactId>
<version>1.0-SNAPSHOT</version>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.8.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.0.1</version

最低0.47元/天 解锁文章
9万+

被折叠的 条评论
为什么被折叠?



