windows中使用redisbloom过滤器:
https://blog.csdn.net/weixin_44770915/article/details/107918770https://blog.csdn.net/weixin_44770915/article/details/107918770

package com.example.redisclient.util;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.data.redis.core.script.DefaultRedisScript;
import org.springframework.data.redis.core.script.RedisScript;
import org.springframework.stereotype.Component;
import java.util.Arrays;
import java.util.List;/*** 布隆过滤器*/
@Component
public class RedisBloom {@Autowiredprivate StringRedisTemplate redisTemplate;private static RedisScript<Boolean> bfreserveScript = new DefaultRedisScript<>("if redis.call('bf.reserve', KEYS[1], ARGV[1], ARGV[2]) then return true else return false end", Boolean.class);private static RedisScript<Boolean> bfaddScript = new DefaultRedisScript<>("return redis.call('bf.add', KEYS[1], ARGV[1])", Boolean.class);private static RedisScript<Boolean> bfexistsScript = new DefaultRedisScript<>("return redis.call('bf.exists', KEYS[1], ARGV[1])", Boolean.class);private static String bfmaddScript = "return redis.call('bf.madd', KEYS[1], %s)";private static String bfmexistsScript = "return redis.call('bf.mexists', KEYS[1], %s)";/*** 设置错误率和大小(需要在添加元素前调用,若已存在元素,则会报错)* 错误率越低,需要的空间越大* @param key* @param errorRate 错误率,默认0.01* @param initialSize 默认100,预计放入的元素数量,当实际数量超出这个数值时,误判率会上升,尽量估计一个准确数值再加上一定的冗余空间* @return*/public Boolean bfreserve(String key, double errorRate, int initialSize){Boolean create = false;try {create = redisTemplate.execute(bfreserveScript, Arrays.asList(key), errorRate+"", initialSize+"");}catch (Exception e){if (e.getMessage().contains("ERR item exists")){System.out.println("过滤器已经存在");}}return create;}/*** 添加元素,如果过滤器不存在则新建* @param key* @param value* @return true表示添加成功,false表示添加失败(存在时会返回false)*/public Boolean bfadd(String key, String value){return redisTemplate.execute(bfaddScript, Arrays.asList(key), value);}/*** 查看元素是否存在(判断为存在时有可能是误判,不存在是一定不存在)* @param key* @param value* @return true表示存在,false表示不存在*/public Boolean bfexists(String key, String value){return redisTemplate.execute(bfexistsScript, Arrays.asList(key), value);}/*** 批量添加元素* @param key* @param values* @return 按序 1表示添加成功,0表示添加失败*/public List<Integer> bfmadd(String key, String... values){return (List<Integer>)redisTemplate.execute(this.generateScript(bfmaddScript, values), Arrays.asList(key), values);}/*** 批量检查元素是否存在(判断为存在时有可能是误判,不存在是一定不存在)* @param key* @param values* @return 按序 1表示存在,0表示不存在*/public List<Integer> bfmexists(String key, String... values){return (List<Integer>)redisTemplate.execute(this.generateScript(bfmexistsScript, values), Arrays.asList(key), values);}private RedisScript<List> generateScript(String script, String[] values) {StringBuilder sb = new StringBuilder();for(int i = 1; i <= values.length; i ++){if(i != 1){sb.append(",");}sb.append("ARGV[").append(i).append("]");}return new DefaultRedisScript<>(String.format(script, sb.toString()), List.class);}}

redis使用布隆过滤器相关推荐

  1. 布隆过滤器 布谷鸟过滤器 Redis 安装布隆过滤器

    布隆过滤器 &布谷鸟过滤器 & Redis 安装布隆过滤器 1.布隆过滤器 1.1 简介 百度百科:布隆过滤器(Bloom Filter)是1970年由布隆提出的.它实际上是一个很长的 ...

  2. Redis进阶-布隆过滤器

    文章目录 Pre 布隆能解决哪些问题? BloomFilter实现原理 构建布隆过滤器 构建布隆的误差率 实际误差率推算 布隆过滤器 (JVM级别) 布隆过滤器 (分布式) Bloom Filter的 ...

  3. Redis中布隆过滤器的使用及原理

    <玩转Redis>系列文章主要讲述Redis的基础及中高级应用.本文是<玩转Redis>系列第[11]篇,最新系列文章请前往公众号"zxiaofan"查看, ...

  4. Redis Guava 布隆过滤器实现和准确率测试

    测试准确率 布隆过滤器的作用 判断这个数据是否存在于我们的集合中存在就是1 不存在就是0 它的底层实现就是一个二进制的数列 原理, 我们都知道hash算法, 如同给我们的数据加入了一个指纹, 但是ha ...

  5. Redis之布隆过滤器与布谷鸟过滤器

    点击上方"Java基基",选择"设为星标" 做积极的人,而不是积极废人! 每天 14:00 更新文章,每天掉亿点点头发... 源码精品专栏 原创 | Java ...

  6. Redis 之布隆过滤器与布谷鸟过滤器

    欢迎关注方志朋的博客,回复"666"获面试宝典 大家都知道,在计算机中,IO一直是一个瓶颈,很多框架以及技术甚至硬件都是为了降低IO操作而生,今天聊一聊过滤器,先说一个场景: 我们 ...

  7. 【redis】布隆过滤器详解

    简介 本质上布隆过滤器是一种数据结构,比较巧妙的概率型数据结构(probabilistic data structure),它实际上是一个很长的二进制向量和一系列随机映射函数. 布隆过滤器可以用于检索 ...

  8. Redis Bloom布隆过滤器的安装及使用

    Bloom布隆过滤器用于解决缓存穿透的问题.故意搜索一些你缓存和数据库中没有的一些数据,恶意穿透缓存形成对数据库的攻击. Bloom过滤器的解决思路是:将数据库中已有的数据先拿到放到一个集合里,用户请 ...

  9. Redis之布隆过滤器(BloomFilter)

    Redis-避免缓存穿透的利器之BloomFilter 目录 Redis-避免缓存穿透的利器之BloomFilter Bloom Filter 概念 Bloom Filter 原理 缓存穿透 Bloo ...

最新文章

  1. oracle改表结构,Oracle修改表结构
  2. tensorflow(4)踩过的一些坑
  3. 实验中遇到的Quartus II的Warning的解释、原因以及解决方法
  4. 3x3,5x5,7x7卷积核识别效率对比
  5. linux系统下源码安装mysql5.6数据库
  6. Linux提高工作效率的命令
  7. java 内省 反射_Java的反射和内省
  8. linux 命令终端显示-bash-4.2#解决方法
  9. java bean的反射类_JAVA中反射机制五(JavaBean的内省与BeanUtils库)
  10. vue中this.init用法_Vue中的this.$options.data()和this.$data用法说明
  11. 蓝桥杯 ALGO-1 算法训练 区间k大数查询
  12. 我的第一个字典-Dictionary
  13. PHP MySQL 数据字典生成器
  14. 高精度室内外融合定位服务平台-“羲和”系统
  15. 关于tensorflow linux avx2指令集的安装处理
  16. matlab多行注释快捷键。
  17. android学习笔记----手机号码查询归属地
  18. 移动硬盘插入笔记本会后,右下角有图标显示,但是我的电脑里面不显示,导致打不开硬盘
  19. 美国犹他大学计算机专业怎么样,2018美国计算机工程专业排名一览表
  20. 图像特效---哈哈镜效果滤镜

热门文章

  1. Jetpack Compose - Button
  2. PAT 基础练习题 7-1 厘米换算英尺英寸 (15 分)
  3. 编程题(类的多态性)。设计一个银行基本账户类(题目中没有明确说明的要求自定)。属性有:开户行,账号,姓名,开户日期,账户余额,联系电话。行为有:查询余额,计算利息(该函数为纯虚函数)。
  4. blender基础1:水杯建模~超详细手把手教学,包学包会。
  5. 浏览器自带的autocomplete默认样式是淡黄色的背景
  6. Linux网络管理命令
  7. 电脑安装win7系统后没有声音怎么办
  8. 谷歌浏览器Chrome书签同步方法(新方法)
  9. 人工智能时代最稀缺的是人才?
  10. open函数返回值为0