Évaluation de l'instance Huawei Cloud Yaoyun Server L | Installation de BloomFilter dans le conteneur Redis Docker et utilisation de la version plug-in Redis du filtre Bloom au printemps

Insérer la description de l'image ici

Préface

Récemment, l'instance Huawei Cloud Yaoyun Server L a été publiée et j'en ai également construit une pour jouer. Au cours du processus, j'ai rencontré divers problèmes et j'ai beaucoup appris sur le fonctionnement et la maintenance tout en résolvant les problèmes.

Ce blog explique comment installer BloomFilter dans le conteneur Docker Redis et le combiner avec Spring.

La liste des autres articles relatifs à l'évaluation de l'instance Huawei Cloud Yaoyun Server L est la suivante :

emmener


1. Installez BloomFilter dans le conteneur Redis Docker
2. Utilisez la version plug-in Redis du filtre Bloom au printemps.
Insérer la description de l'image ici

1. Installez BloomFilter dans Redis

1.Documents officiels de référence du site Internet

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

Insérer la description de l'image ici

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

https://github.com/RedisBloom/RedisBloom

Insérer la description de l'image ici

2.Cloner le code du site officiel

apt-get install -y git

Insérer la description de l'image ici

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

Insérer la description de l'image ici

3. Installez cmake

sudo apt install cmake

Insérer la description de l'image ici

Erreur signalée, vous devez installer cmake

Insérer la description de l'image ici

sudo apt install cmake

Insérer la description de l'image ici

4. Compiler dans son ensemble

make commande pour compiler

Insérer la description de l'image ici

Compilé ainsi fichier

Insérer la description de l'image ici

5. Copiez le fichier so et configurez-le

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

Insérer la description de l'image ici

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

Insérer la description de l'image ici

Afficher le journal

Insérer la description de l'image ici

6. Utilisation préliminaire

docker exec -it redis_6379 bash

Insérer la description de l'image ici

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> 

Insérer la description de l'image ici

Autres commandes

Insérer la description de l'image ici

Commande Description
BF.AJOUTER Ajouter un élément au filtre bloom
BF.EXISTE Déterminer si l'élément sera dans le filtre bloom
BF.INFO Renvoie des informations sur les filtres Bloom
BF.INSÉRER Ajoutez plusieurs éléments au filtre. Si la clé n'existe pas, un nouveau filtre est créé.
BF.MADD Ajouter plusieurs éléments au filtre bloom
BF.MEXISTES Déterminer si plusieurs éléments seront inclus dans le filtre Bloom
BF.RESERVE Créez un filtre de floraison. Définir le taux de faux positifs et la capacité
BF.SCANDUMP Commencez à enregistrer progressivement les filtres Bloom.
BF.LOADCHUNK Restaurez les filtres Bloom précédemment enregistrés à l'aide de BF.SCANDUMP.

2. Combiné avec le script Lua et utilisé au printemps

Insérer la description de l'image ici

1. Comment écrire des scripts 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);
    }
}

Insérer la description de l'image ici

2. Méthodes sans utiliser de scripts Lua

Insérer la description de l'image ici

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()));
    }
}

Insérer la description de l'image ici


Résumer

1. Installez BloomFilter dans le conteneur Redis Docker
2. Utilisez la version plug-in Redis du filtre Bloom au printemps.

Je suppose que tu aimes

Origine blog.csdn.net/Pireley/article/details/133268762
conseillé
Classement