首页 > 其他分享 >服务治理-布隆过滤器

服务治理-布隆过滤器

时间:2022-11-13 00:44:11浏览次数:67  
标签:redis 布隆 filter go 治理 过滤器 byte

布隆过滤器

布隆过滤器(英语:Bloom Filter)是1970年由布隆提出的。它实际上是一个很长的二进制向量和一系列随机映射函数。元素可以添加到集合中,但不能删除(计数布鲁姆过滤器变体支持删除);

作用

布隆过滤器可以用于判断一个元素可能存在或者一定不存在。

参考文章

go-zero 中的实现

go-zero 中基于 redis 实现了布隆过滤器

通过 lua 脚本 setbit 和 getbit

	setScript = `
for _, offset in ipairs(ARGV) do
	redis.call("setbit", KEYS[1], offset, 1)
end
`
	testScript = `
for _, offset in ipairs(ARGV) do
	if tonumber(redis.call("getbit", KEYS[1], offset)) == 0 then
		return false
	end
end

使用

package main

import (
	"fmt"

	"github.com/zeromicro/go-zero/core/bloom"
	"github.com/zeromicro/go-zero/core/stores/redis"
)

func main() {
	store := redis.New("localhost:6379")
	filter := bloom.New(store, "testbloom", 64)
	filter.Add([]byte("kevin"))
	filter.Add([]byte("wan"))
	fmt.Println(filter.Exists([]byte("kevin")))
	fmt.Println(filter.Exists([]byte("wan")))
	fmt.Println(filter.Exists([]byte("nothing")))
}

应用场景

  • 网页爬虫对 URL 去重,避免爬取相同的 URL 地址
  • 反垃圾邮件,从数十亿个垃圾邮件列表中判断某邮箱是否垃圾邮箱
  • Google Chrome 使用布隆过滤器识别恶意 URL
  • Medium 使用布隆过滤器避免推荐给用户已经读过的文章
  • Google BigTable,Apache HBbase 和 Apache Cassandra 使用布隆过滤器减少对不存在的行和列的查找
  • 解决缓存穿透

解决缓存穿透问题

  1. 预先把数据查询的主键,比如用户 ID 或文章 ID 缓存到过滤器中。
  2. 当根据 ID 进行数据查询的时候,先通过布隆过滤器判断数据是否存在,如果不存在,则直接返回,这样就减少触发后续的数据库查询。由于布隆过滤器只能判断数据可能存在或者一定不存在,所以无法完全解决缓存穿透的问题,但可以将其控制在一个可容忍的范围内。

标签:redis,布隆,filter,go,治理,过滤器,byte
From: https://www.cnblogs.com/arvinhuang/p/16881048.html

相关文章

  • 过滤器的使用
    (过滤器全路径:javax.servlet.filter)方法:publicabstractvoidinit(filterconfigparamfilterconfig)说明:初始化方法:publicabstractvoiddofilter(...)方法:pub......
  • 服务治理实施流程
    服务管理是整个服务治理体系的基础,它通过建立服务资产库,形成服务资源清单,确定管理对象。服务管理不但管理单个的服务,还管理服务关系;不但管理服务的静态信息,还管理服务的运态......
  • SpringBoot 03: 常用web组件 - - - 拦截器 + Servlet + 过滤器
    常用web组件拦截器Servlet过滤器使用思想创建自定义类实现或者继承框架里的接口或类将自定义类注册到框架中使用自定义类拦截器说明拦截器是SpringMVC中的......
  • Vue中如何自定义过滤器 ?
    过滤器可以格式化我们所需要的数据格式 ;自定义过滤器分为全局和局部过滤器:全局过滤器在main.js中使用Vue.direct4ive(过滤器名字,定义过滤器的具体行为函数);......
  • servlet实操之filter过滤器
    Filter过滤器:用来过滤网站的数据处理中文乱码登录验证...实现过程1、导包2、编写过滤器​ 2.1、包不要到错</dependency><!--JSTL表达......
  • 浅析布隆过滤器
    一、什么是BloomFilter布隆过滤器(英语:BloomFilter)是1970年由布隆提出的。它实际上是一个很长的二进制向量和一系列随机映射函数。主要用于判断一个元素是否在一个集合......
  • Spring Cloud Alibaba:Gateway之路由过滤器工厂(三)
    前两篇博客已经介绍了十一种路由过滤器工厂:​​SpringCloudAlibaba:Gateway之路由过滤器工厂(一)​​​​SpringCloudAlibaba:Gateway之路由过滤器工厂(二)​​随着​​Gatewa......
  • CTO/CIO如何治理数据
    在数字化转型过程中,企业首先要做的便是打通数据烟囱,这就涉及具体的数据治理。数据治理的目的是为业务提供指导,成熟的数据智能管理者会先从应用的角度切入,从全局思考数据治......
  • 如何实现数据分析和条件格式过滤器?DevExpress组件可以实现
    DevExpressWPF拥有120+个控件和库,将帮助您交付满足甚至超出企业需求的高性能业务应用程序。通过DevExpressWPF能创建有着强大互动功能的XAML基础应用程序,这些应用程序专......
  • C# MVC 权限过滤器
    实现需求:验证Token是否有效,重写状态码和返回内容///<summary>///权限过滤器,验证Token是否有效///</summary>///<paramname="filterCo......