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 :
Annuaire d'articles
emmener
1. Installez BloomFilter dans le conteneur Redis Docker
2. Utilisez la version plug-in Redis du filtre Bloom au printemps.
1. Installez BloomFilter dans Redis
1.Documents officiels de référence du site Internet
https://redis.io/resources/modules/
https://redis.io/docs/data-types/probabilistic/bloom-filter/
https://github.com/RedisBloom/RedisBloom
2.Cloner le code du site officiel
apt-get install -y git
git clone --recursive https://github.com/RedisBloom/RedisBloom.git
3. Installez cmake
sudo apt install cmake
Erreur signalée, vous devez installer cmake
sudo apt install cmake
4. Compiler dans son ensemble
make commande pour compiler
Compilé ainsi fichier
5. Copiez le fichier so et configurez-le
docker cp redisbloom.so redis_6379:/usr/local/etc/redis
loadmodule /root/Redis/RedisBloom/bin/linux-x64-release/redisbloom.so
Afficher le journal
6. Utilisation préliminaire
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>
Autres commandes
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
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);
}
}
2. Méthodes sans utiliser de scripts 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()));
}
}
Résumer
1. Installez BloomFilter dans le conteneur Redis Docker
2. Utilisez la version plug-in Redis du filtre Bloom au printemps.