首页 > 数据库 >布隆过滤器 及 Redis Sorted sets 使用注意事项

布隆过滤器 及 Redis Sorted sets 使用注意事项

时间:2024-04-10 20:55:19浏览次数:19  
标签:元素 Redis 布隆 sets 过滤器 Sorted 散列

布隆过滤器

基本概念

布隆过滤器(英语:Bloom Filter)是1970年由伯顿·霍华德·布隆(Burton Howard Bloom)提出的。它实际上是一个很长的二进制向量和一系列随机映射函数

布隆过滤器可以用于检索一个元素是否在一个集合中。它的优点是空间效率查询时间远远超过一般的算法,缺点是有一定的误识别率和删除困难。

布隆过滤器的原理:当一个元素被加入集合时,通过 K 个散列函数将这个元素映射成一个位数组中的 K 个点,把它们置为 1。检索时,我们只要看看这些点是不是都是 1 就(大约)知道集合中有没有它了:如果这些点有任何一个 0,则被检元素一定不在;如果都是 1,则被检元素很可能在

简单来说就是准备一个长度为 m 的位数组并初始化所有元素为 0,用 k 个散列函数对元素进行 k 次散列运算跟 len (m) 取余得到 k 个位置并将 m 中对应位置设置为 1。

优点

  • 存储空间和插入/查询时间都是常数(O(k));
  • 散列函数直接没有关系,可以由硬件并行实现;
  • 不需要要存储元素本身的数据,保密场合有优势

缺点

  • 随着存入元素量的增加,误算率随之增加;

用途

  • 限流,将不在服务范围内的请求排除在外;
  • 防止内存穿透;

Redis Sorted sets 注意事项

在使用sorted sets时,不能和其它业务混在一起,因为Redis是单线程,排序会造成类似于STW(Stop The World)的效果;

参考文档

[1] 品味布隆过滤器的设计之美

[2] 布隆过滤器 wiki

标签:元素,Redis,布隆,sets,过滤器,Sorted,散列
From: https://www.cnblogs.com/bloodcolding/p/18127398

相关文章

  • sort和sorted的区别使用
    l=list(map(int,input().split()))b=sorted(l,reverse=False)#reverse=True是降序,False是降序print(b)#sorted()函数是将一个排好序的列表赋给另一变量a.sort(reverse=False)#用法和sorted一样#只不过sort函数直接将列表进行排序不能赋给其他列表在代码里我们可以在注释里......
  • group by grouping sets计算每个分组的占比
    计算每个分组的数量selectparent_dict_code,count(*)fromtb_data_dictgroupbyrollup(parent_dict_code);计算占比,注意要*1.0,否则仍为整型,全为0selectparent_dict_code,count(data_dict_id),(selectcount(data_dict_id)fromtb_data_dict)assum_all,count(data_dict......
  • Redis支持事务 yii操作示例代码
    //首先确保已经配置了Yii的Redis组件//在配置文件中(例如:config/main.php)return[//...'components'=>['redis'=>['class'=>'yii\redis\Connection','hostname'=>&......
  • Redis主从
    检查防火墙是否开启(如果开启需要关闭)systemctlstatusfirewalld开启httpd服务systemctlstarthttpd上传gpmall-repo压缩包安装unzip解压服务yuminstall-yunzip解压gpmall-repo文件unzip/gpmall-repo.zip把解压出来的文件移动到opt目录下mv/gpmall-repo/op......
  • redis自学(31)增量同步
    如果slave重启后同步,则执行增量同步  什么情况下无法做增量同步  repl_baklog是个数组,它会循环覆盖之前的数据。如果master记录的数量超出这个环,覆盖了slave的offset,找不到了,就只能去做全量同步了     可以从以下几个方面来优化redis主从集群:l 在maste......
  • java synchronized 还是用redis 锁 java的synchronized的实现原理
    synchronized是同步的意思,在java多线程中,我们一般会考虑共享数据的处理,共享数据的处理包含两块,第一是共享数据,第二是在多线程访问共享数据的时候,如果处理共享数据,保证数据的有效正确性。我们要保证线程A访问共享数据,对数据进行处理的时候,其他线程能够等待线程A访问完毕后,和线程A看......
  • Redis如何防止高并发?
    其实redis是不会存在并发问题的,因为他是单进程的,再多的命令都是一个接一个地执行的。我们使用的时候,可能会出现并发问题,比如获得和设定这一对。Redis的为什么有高并发问题?Redis的的出身决定Redis是一种单线程机制的nosql数据库,基于key-value,数据可持久化落盘。由于单线程所以red......
  • 高可用之战:Redis Sentinal(哨兵模式)
    ★Redis24篇集合1背景在我们的《Redis高可用之战:主从架构》篇章中,介绍了Redis的主从架构模式,可以有效的提升Redis服务的可用性,减少甚至避免Redis服务发生完全宕机的可能。它主要包含如下能力:1.故障隔离和恢复:无论主节点或者从节点宕机,其他节点依然可以保证服务的正常运行,并......
  • GO——6分布式锁分布式id___自己使用redis实现,(官方),,分布式id,,go协程,,gin框架,,
    分布式锁分布式id#锁的作用:保证多线程并发情况下,数据的安全-互斥锁-递归锁只能保证同一个进程下的线程#django项目---》部署在多台机器上---》下单场景---》悲观锁--》同一时刻,必须获得锁才能进入下单流程,释放锁--》别人才能进入下单流程-用my......
  • Redis Sentinel 哨兵模式 故障转移失败 -failover-abort-no-good-slave master mymast
    根据网上的解决方案:1.我核对了sentinel.config和redis.configbind绑定的端口。2.三台redismasterauth都设置了密码3.sentinel.config的sentinelmonitormymaster和sentinelauth-passmymaster也没有错。但在我测试主从复制的时候,发现主从主机无法相连,我在网上找的解决......