当前位置: 首页> 房产> 家装 > 黑名单如果上到一定规模,比如百万级别,其他的设计思路

黑名单如果上到一定规模,比如百万级别,其他的设计思路

时间:2025/7/15 9:57:29来源:https://blog.csdn.net/weixin_43076660/article/details/140630221 浏览次数:0次
  1. 布隆过滤器(Bloom Filter):

    原理:使用多个哈希函数和一个位数组来表示一个集合,快速判断元素是否可能在集合中。 优点:空间效率高,查询速度快。
    缺点:存在一定的误判率。 适用场景:需要快速判断元素是否在黑名单中,且可以容忍一定误判率的场景。
    示例:反垃圾邮件系统中,快速判断邮件地址是否可能是垃圾邮件地址。

import java.util.BitSet;
import java.util.Random;public class BloomFilter {private static final int DEFAULT_SIZE = 2 << 24; // 布隆过滤器的位数组大小private static final int[] SEEDS = new int[]{3, 5, 7, 11, 13, 17, 19, 23, 29, 31}; // 哈希函数的种子private BitSet bits = new BitSet(DEFAULT_SIZE);private SimpleHash[] func = new SimpleHash[SEEDS.length];public BloomFilter() {for (int i = 0; i < SEEDS.length; i++) {func[i] = new SimpleHash(DEFAULT_SIZE, SEEDS[i]);}}// 添加元素到布隆过滤器public void add(String value) {for (SimpleHash f : func) {bits.set(f.hash(value), true);}}// 判断元素是否可能在布隆过滤器中public boolean contains(String value) {if (value == null) {return false;}boolean ret = true;for (SimpleHash f : func) {ret = ret && bits.get(f.hash(value));}return ret;}// 哈希函数类public static class SimpleHash {private int cap;private int seed;public SimpleHash(int cap, int seed) {this.cap = cap;this.seed = seed;}// 计算哈希值public int hash(String value) {int result = 0;int len = value.length();for (int i = 0; i < len; i++) {result = seed * result + value.charAt(i);}return (cap - 1) & result;}}public static void main(String[] args) {BloomFilter bloomFilter = new BloomFilter();bloomFilter.add("hello");bloomFilter.add("world");System.out.println(bloomFilter.contains("hello")); // 输出: trueSystem.out.println(bloomFilter.contains("world")); // 输出: trueSystem.out.println(bloomFilter.contains("java"));  // 输出: false}
}
  1. 分布式缓存:

    原理:使用分布式缓存(如Redis)存储黑名单数据,提供快速的查询性能。 优点:查询速度快,支持高并发,可以水平扩展。
    缺点:需要额外的缓存服务器,增加系统复杂性和成本。 适用场景:需要快速查询黑名单,且对查询性能有较高要求的场景。
    示例:实时风控系统中,快速查询用户是否在黑名单中。
    在这里插入图片描述

  2. 分片(Sharding):

    原理:将黑名单数据分片存储在多个数据库或缓存节点上,提高查询性能和系统可扩展性。 优点:提高查询性能,支持高并发,可以水平扩展。
    缺点:需要设计和实现分片逻辑,增加系统复杂性。 适用场景:黑名单数据量巨大,且需要高并发查询的场景。
    示例:大型社交平台中,存储和管理用户黑名单。

  3. 倒排索引(Inverted Index):

    原理:将黑名单中的每个元素作为索引项,快速查找包含该元素的记录。 优点:查询速度快,适用于大规模数据集。
    缺点:需要额外的索引构建和维护成本。 适用场景:黑名单数据量巨大,且需要快速查找包含特定元素的记录的场景。
    示例:内容过滤系统中,快速查找包含特定敏感词的文档。

import java.util.*;public class UserBlacklistIndex {private Set<String> blacklist = new HashSet<>();// 添加用户到黑名单public void addToBlacklist(String userId) {blacklist.add(userId);}// 检查用户是否在黑名单中public boolean isBlacklisted(String userId) {return blacklist.contains(userId);}public static void main(String[] args) {UserBlacklistIndex blacklistIndex = new UserBlacklistIndex();// 添加用户到黑名单blacklistIndex.addToBlacklist("user1");blacklistIndex.addToBlacklist("user3");// 检查用户是否在黑名单中System.out.println("User1 is blacklisted: " + blacklistIndex.isBlacklisted("user1")); // 输出: trueSystem.out.println("User2 is blacklisted: " + blacklistIndex.isBlacklisted("user2")); // 输出: falseSystem.out.println("User3 is blacklisted: " + blacklistIndex.isBlacklisted("user3")); // 输出: true}
}
  1. 哈希表(Hash Table):

    原理:使用哈希函数将键映射到数组中的一个位置,实现常数时间的查找性能。 优点:查询速度快,适用于需要快速查找的场景。
    缺点:存储空间较大,数据量巨大时可能面临哈希冲突问题。 适用场景:黑名单数据量较大,且需要快速查找的场景。
    示例:用户认证系统中,快速查找用户是否在黑名单中。

import java.util.HashMap;
import java.util.Map;public class BlacklistHashTable {private Map<String, Boolean> blacklist = new HashMap<>();// 添加用户到黑名单public void addToBlacklist(String userId) {blacklist.put(userId, true);}// 检查用户是否在黑名单中public boolean isBlacklisted(String userId) {return blacklist.containsKey(userId);}public static void main(String[] args) {BlacklistHashTable blacklistHashTable = new BlacklistHashTable();// 添加用户到黑名单blacklistHashTable.addToBlacklist("user1");blacklistHashTable.addToBlacklist("user3");// 检查用户是否在黑名单中System.out.println("User1 is blacklisted: " + blacklistHashTable.isBlacklisted("user1")); // 输出: trueSystem.out.println("User2 is blacklisted: " + blacklistHashTable.isBlacklisted("user2")); // 输出: falseSystem.out.println("User3 is blacklisted: " + blacklistHashTable.isBlacklisted("user3")); // 输出: true}
}

在实际应用中,可以根据具体的需求和场景选择合适的设计思路,并结合多种方法来实现高效的黑名单管理和查询。

关键字:黑名单如果上到一定规模,比如百万级别,其他的设计思路

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: