Huawei Cloud Yaoyun Server L インスタンスの評価 | Redis Docker コンテナに BloomFilter をインストールし、Spring で Bloom フィルターの Redis プラグイン バージョンを使用する

ここに画像の説明を挿入します

序文

最近、Huawei Cloud Yaoyun Server L インスタンスがリリースされ、私も構築して遊んでみましたが、その過程でさまざまな問題に遭遇し、問題を解決する過程での運用保守について多くのことを学びました。

このブログでは、Redis Docker コンテナに BloomFilter をインストールし、Spring と組み合わせる方法を紹介します。

その他の関連する Huawei Cloud Yaoyun Server L インスタンスの評価記事のリストは次のとおりです。

導き出す


1. Redis Docker コンテナに BloomFilter をインストールします;
2. Spring で Bloom フィルターの Redis プラグイン バージョンを使用します。
ここに画像の説明を挿入します

1. Redis に BloomFilter をインストールする

1.公式サイト参考資料

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

ここに画像の説明を挿入します

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

https://github.com/RedisBloom/RedisBloom

ここに画像の説明を挿入します

2.公式ウェブサイトのコードをクローンする

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> 

ここに画像の説明を挿入します

その他のコマンド

ここに画像の説明を挿入します

指示 説明
BF.追加 ブルームフィルターに要素を追加する
BF.EXISTS 要素がブルーム フィルターに含まれるかどうかを決定します。
BF.INFO ブルームフィルターに関する情報を返します。
BF.インサート 複数の要素をフィルターに追加します。キーが存在しない場合は、新しいフィルターが作成されます。
BF.マッド ブルームフィルターに複数の要素を追加する
BF.メキシコ人 ブルームフィルターに複数の要素が含まれるかどうかを決定します。
BF.リザーブ ブルームフィルターを作成します。誤検知率と容量を設定する
BF.スキャンダン​​プ ブルーム フィルターの段階的な保存を開始します。
BF.ロードチャンク BF.SCANDUMP を使用して以前に保存したブルーム フィルターを復元します。

2. 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 で Bloom フィルターの Redis プラグイン バージョンを使用します。

おすすめ

転載: blog.csdn.net/Pireley/article/details/133268762