码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 华为云云耀云服务器L实例评测|在Redis的Docker容器中安装BloomFilter & 在Spring中使用Redis插件版的布隆过滤器


    在这里插入图片描述

    前言

    最近华为云云耀云服务器L实例上新,也搞了一台来玩,期间遇到各种问题,在解决问题的过程中学到不少和运维相关的知识。

    本篇博客介绍如何在Redis的docker容器中安装BloomFilter,并且结合spring的使用方式。

    其他相关的华为云云耀云服务器L实例评测文章列表如下:

    • 初始化配置SSH连接 & 安装MySQL的docker镜像 & 安装redis以及主从搭建 & 7.2版本redis.conf配置文件

    • 安装Java8环境 & 配置环境变量 & spring项目部署 &【!】存在问题未解决

    • 部署spring项目端口开放问题的解决 & 服务器项目环境搭建MySQL,Redis,Minio…指南

    • 由于自己原因导致MySQL数据库被攻击 & MySQL的binlog日志文件的理解

    • 认识redis未授权访问漏洞 & 漏洞的部分复现 & 设置连接密码 & redis其他命令学习

    • 拉取创建canal镜像配置相关参数 & 搭建canal连接MySQL数据库 & spring项目应用canal初步

    • Docker版的Minio安装 & Springboot项目中的使用 & 结合vue进行图片的存取

    文章目录

    • 前言
    • 引出
    • 一、Redis里面安装BloomFilter
      • 1.官网参考文档
      • 2.clone官网的代码
      • 3.安装一下cmake
      • 4.进行整体编译
      • 5.拷贝so文件,进行配置
      • 6.使用初步
    • 二、结合lua脚本在spring中使用
      • 1.编写lua脚本的方式
      • 2.不使用lua脚本的方式
    • 总结

    引出


    1.在Redis的Docker容器中安装BloomFilter;
    2.在Spring中使用Redis插件版的布隆过滤器;
    在这里插入图片描述

    一、Redis里面安装BloomFilter

    1.官网参考文档

    https://redis.io/resources/modules/

    在这里插入图片描述

    https://redis.io/docs/data-types/probabilistic/bloom-filter/

    https://github.com/RedisBloom/RedisBloom

    在这里插入图片描述

    2.clone官网的代码

    apt-get install -y git
    
    • 1

    在这里插入图片描述

    git clone --recursive https://github.com/RedisBloom/RedisBloom.git
    
    • 1

    在这里插入图片描述

    3.安装一下cmake

    sudo apt install cmake
    
    • 1

    在这里插入图片描述

    报错,需要安装一下cmake

    在这里插入图片描述

    sudo apt install cmake
    
    • 1

    在这里插入图片描述

    4.进行整体编译

    make命令进行编译

    在这里插入图片描述

    编译后的so文件

    在这里插入图片描述

    5.拷贝so文件,进行配置

    docker cp redisbloom.so redis_6379:/usr/local/etc/redis
    
    • 1

    在这里插入图片描述

    loadmodule /root/Redis/RedisBloom/bin/linux-x64-release/redisbloom.so
    
    • 1

    在这里插入图片描述

    查看日志

    在这里插入图片描述

    6.使用初步

    docker exec -it redis_6379 bash
    
    • 1

    在这里插入图片描述

    root@706d04b2ea4d:/data# redis-cli
    127.0.0.1:6379> auth XXX
    OK
    127.0.0.1:6379> BF.ADD bmFilter tom123
    (integer) 1
    127.0.0.1:6379> BF.exists bmFilter tom123
    (integer) 1
    127.0.0.1:6379> BF.exists bmFilter tom124
    (integer) 0
    127.0.0.1:6379> 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    在这里插入图片描述

    其他命令

    在这里插入图片描述

    CommandDescription
    BF.ADD添加一个元素到布隆过滤器
    BF.EXISTS判断元素会不会在布隆过滤器
    BF.INFO返回有关布隆过滤器的信息
    BF.INSERT将多个元素添加到过滤器。如果键不存在,它会创建一个新的过滤器。
    BF.MADD添加多个元素到布隆过滤器
    BF.MEXISTS判断多个元素会不会在布隆过滤器
    BF.RESERVE创建一个布隆过滤器。设置误判率和容量
    BF.SCANDUMP开始增量保存 Bloom 过滤器。
    BF.LOADCHUNK恢复之前使用BF.SCANDUMP保存的布隆过滤器。

    二、结合lua脚本在spring中使用

    在这里插入图片描述

    1.编写lua脚本的方式

    127.0.0.1:6379> BF.ADD bmFilter tom123
    
    • 1
    -- lua脚本
    local key1 = KEYS[1]      --key是从1开始
    local argv1 = ARGV[1]      --第一个值
    -- 使用redis的命令 BF.ADD
    local retVal = redis.call('BF.ADD',key1,argv1)
    -- 将结果返回
    return retVal
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
        @Bean
        public RedisScript<Long> bloomFilter(){
            DefaultRedisScript redisScript = new DefaultRedisScript<>();
            redisScript.setResultType(Long.class);
            // lua脚本的位置
            redisScript.setLocation(
                    new ClassPathResource("/lua/bloom-demo.lua") // 关联lua脚本
            );
            return redisScript;
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    package com.tianju.fresh.service;
    
    import org.junit.Test;
    import org.junit.runner.RunWith;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.boot.test.context.SpringBootTest;
    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.test.context.junit4.SpringJUnit4ClassRunner;
    
    import javax.annotation.Resource;
    import java.util.ArrayList;
    import java.util.List;
    import java.util.stream.Collectors;
    import java.util.stream.Stream;
    
    import static java.util.stream.Collectors.toList;
    
    @SpringBootTest
    @RunWith(SpringJUnit4ClassRunner.class)
    public class BloomFilterTest {
    
        @Resource
        private RedisScript bloomFilter;
    
        @Autowired
        private StringRedisTemplate stringRedisTemplate;
    
        @Test
        public void testLuaBloom(){
            List<String> keys = new ArrayList<>();
            keys.add("testFilter"); // redis的bloom的key
            Object result = stringRedisTemplate.opsForValue().getOperations()
                    .execute(bloomFilter, keys, "pet365");
            System.out.println("Lua脚本返回结果:"+result);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38

    在这里插入图片描述

    2.不使用lua脚本的方式

    在这里插入图片描述

    package com.tianju.fresh.service;
    
    import org.junit.Test;
    import org.junit.runner.RunWith;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.boot.test.context.SpringBootTest;
    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.test.context.junit4.SpringJUnit4ClassRunner;
    
    import javax.annotation.Resource;
    import java.util.ArrayList;
    import java.util.List;
    import java.util.stream.Collectors;
    import java.util.stream.Stream;
    
    import static java.util.stream.Collectors.toList;
    
    @SpringBootTest
    @RunWith(SpringJUnit4ClassRunner.class)
    public class BloomFilterTest {
    
        @Resource
        private RedisScript bloomFilter;
    
        @Autowired
        private StringRedisTemplate stringRedisTemplate;
    
        @Test
        public void testLuaBloom2(){
            List<String> keys = new ArrayList<>();
            keys.add("helloFilter"); // redis的key
            String script = "return redis.call('BF.ADD',KEYS[1],ARGV[1])";
            Long result = stringRedisTemplate.opsForValue()
                    .getOperations()
                    .execute(
                            new DefaultRedisScript<>(script, Long.class),
                            keys,
                            "apple"
                    );
            System.out.println("无lua脚本:"+result);
        }
    
        public static void main(String[] args) {
            System.out.println(Stream.of("abcd").collect(toList()));
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48

    在这里插入图片描述


    总结

    1.在Redis的Docker容器中安装BloomFilter;
    2.在Spring中使用Redis插件版的布隆过滤器;

  • 相关阅读:
    构建高效的BFF(Backend for Frontend):优化前端与后端协作
    SICP-- 元语言抽象--Scheme的变形--惰性求值
    C++特性之智能指针shared_ptr
    微服务架构 | 超时管理
    脉冲波形的产生与变换
    C语言例题(递归、二分查找、冒泡排序)
    基于STM32的智能健康监测手环
    按关键字搜索淘宝商品 API 返回值说明
    电脑上播放4K视频需要具备哪些条件?
    FastApi和Ajax传输图片
  • 原文地址:https://blog.csdn.net/Pireley/article/details/133268762
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号