package com.wty.javaspringboot3;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.redis.core.RedisTemplate;
import java.nio.charset.StandardCharsets;
import java.util.zip.CRC32;
@SpringBootTest
class JavaSpringboot3ApplicationTests {
private final RedisTemplate<String, Object> redisTemplate;
private final int size = 100000; // 位数组大小
private final int[] seeds = new int[]{3, 5, 7, 11, 13, 31, 37, 61}; // 哈希函数种子
@Autowired
public JavaSpringboot3ApplicationTests(RedisTemplate<String, Object> redisTemplate) {
this.redisTemplate = redisTemplate;
}
private int hash(String value, int seed) {
CRC32 crc = new CRC32();
crc.update(value.getBytes(StandardCharsets.UTF_8));
return Math.abs((int) (crc.getValue() ^ seed) % size);
}
public void add(String key, String value) {
for (int seed : seeds) {
int hash = hash(value, seed);
redisTemplate.opsForValue().setBit(key, hash, true);
}
}
public boolean mightContain(String key, String value) {
for (int seed : seeds) {
int hash = hash(value, seed);
if (Boolean.FALSE.equals(redisTemplate.opsForValue().getBit(key, hash))) {
return false;
}
}
return true;
}
@Test
void contextLoads() {
System.out.println(mightContain("name1", "wty"));
}
}
Bitmap实现布隆过滤器
于 2024-07-26 16:39:20 首次发布