/** * redis操作布隆过滤器 * * @param <T> * @author xhj */public class RedisBloomFilter<T> { @Autowired private RedisTemplate redisTemplate; /** * 删除缓存的KEY * * @param key KEY */ public void delete(String key) { redisTemplate.delete(key); } /** * 根据给定的布隆过滤器添加值,在添加一个元素的时候使用,批量添加的性能差 * * @param bloomFilterHelper 布隆过滤器对象 * @param key KEY * @param value 值 * @param <T> 泛型,可以传入任何类型的value */ public <T> void add(BloomFilterHelper<T> bloomFilterHelper, String key, T value) { int[] offset = bloomFilterHelper.murmurHashOffset(value); for (int i : offset) { redisTemplate.opsForValue().setBit(key, i, true); } } /** * 根据给定的布隆过滤器添加值,在添加一批元素的时候使用,批量添加的性能好,使用pipeline方式(如果是集群下,请使用优化后RedisPipeline的操作) * * @param bloomFilterHelper 布隆过滤器对象 * @param key KEY * @param valueList 值,列表 * @param <T> 泛型,可以传入任何类型的value */ public <T> void addList(BloomFilterHelper<T> bloomFilterHelper, String key, List<T> valueList) { redisTemplate.executePipelined(new RedisCallback<Long>() { @Override public Long doInRedis(RedisConnection connection) throws DataAccessException { connection.openPipeline(); for (T value : valueList) { int[] offset = bloomFilterHelper.murmurHashOffset(value); for (int i : offset) { connection.setBit(key.getBytes(), i, true); } } return null; } }); } /** * 根据给定的布隆过滤器判断值是否存在 * * @param bloomFilterHelper 布隆过滤器对象 * @param key KEY * @param value 值 * @param <T> 泛型,可以传入任何类型的value * @return 是否存在 */ public <T> boolean contains(BloomFilterHelper<T> bloomFilterHelper, String key, T value) { int[] offset = bloomFilterHelper.murmurHashOffset(value); for (int i : offset) { if (!redisTemplate.opsForValue().getBit(key, i)) { return false; } } return true; }}
推荐阅读
- 老虎究竟有几种类型?
- 太岁究竟是什么“东西”?我国科学家用精密仪器检测揭示太岁之谜
- 普洱茶选购标准,选购普洱茶生茶的绝招
- 牡丹花茶原料制作以及成分究竟是怎样的,玫瑰花茶到底是什么茶
- 变速箱的功能究竟是什么,汽车不要变速箱行不行?
- 汽车尾气排放究竟跟雾霾有多大关系
- 比亚迪的独门秘籍?DM-i超级混动技术究竟是什么?
- 阳历和阴历究竟有啥不同? 农历是阳历还是阴历
- 微信公众号阅读数分析的技巧是什么? 看看究竟该怎么做
- 铁观音究竟是属黄茶,黄茶白茶绿茶区别是什么