华为云云耀云服务器L实例评测|在Redis的Docker容器中安装BloomFilter & 在Spring中使用Redis插件版的布隆过滤器

在这里插入图片描述

前言

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

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

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

引出


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

在这里插入图片描述

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

在这里插入图片描述

3.安装一下cmake

sudo apt install cmake

在这里插入图片描述

报错,需要安装一下cmake

在这里插入图片描述

sudo apt install cmake

在这里插入图片描述

4.进行整体编译

make命令进行编译

在这里插入图片描述

编译后的so文件

在这里插入图片描述

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

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

在这里插入图片描述

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

在这里插入图片描述

查看日志

在这里插入图片描述

6.使用初步

docker exec -it redis_6379 bash

在这里插入图片描述

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> 

在这里插入图片描述

其他命令

在这里插入图片描述

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
-- lua脚本
local key1 = KEYS[1]      --key是从1开始
local argv1 = ARGV[1]      --第一个值
-- 使用redis的命令 BF.ADD
local retVal = redis.call('BF.ADD',key1,argv1)
-- 将结果返回
return retVal
    @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;
    }
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);
    }
}

在这里插入图片描述

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.在Redis的Docker容器中安装BloomFilter;
2.在Spring中使用Redis插件版的布隆过滤器;

  • 6
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Perley620

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值