static CopyOnWriteArraySet blackIpCopyOnWriteArraySet = null;
/**
* 初始化
*/
public void init() {
// 调用反爬系统接口 拉取批量黑名单
List<String> blackIpList = getBlackIpList();
// 初始化
blackIpCopyOnWriteArraySet = new CopyOnWriteArraySet(blackIpList);
}
/**
* 判断IP 是否黑名单
* @param ip
* @return
*/
public boolean checkIpIsBlack(String ip) {
boolean checkIpIsBlack = blackIpCopyOnWriteArraySet.contains(ip);
if (!checkIpIsBlack )
return false;
// 不在redis白名单里面
if (!RedisUtils.exist(String.format("whiteIp_%", ip)){
return false;
}
return true;
}
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>23.0</version>
</dependency>
public static int count = 1000000;
private static BloomFilter<String> bf = BloomFilter.create(Funnels.stringFunnel(Charset.forName("utf-8")), count,0.009);
public static void main(String[] args) {
int missCount = 0;
for (int i = 0; i < count; i++) {
bf.put(i+"");
}
for (int i = count; i < count+1000000; i++) {
boolean b = bf.mightContain(i +"");
if (b) {
missCount++;
}
}
System.out.println(new BigDecimal(missCount).divide(new BigDecimal(count)));
}
/**
* 初始化
*/
public void init() {
// 这个可以通过配置中心来读取
double fpp = 0.001;
// 调用反爬系统接口 拉取批量黑名单
List<String> blackIpList = getBlackIpList();
// 初始化 不隆过滤器
blackIpBloomFilter = BloomFilter.create(Funnels.stringFunnel(Charset.forName("utf-8")), blackIpList.size(), fpp);
for (String ip: blackIpList) {
blackIpBloomFilter.put(ip);
}
}
/**
* 判断是否是爬虫
*/
public boolean checkIpIsBlack(String ip) {
boolean contain = blackIpBloomFilter.mightContain(ip);
if (!contain) {
return false;
}
// 不在redis白名单里面
if (!RedisUtils.exist(String.format("whiteIp_%", ip)){
return false;
}
// 调用反爬系统接口 判断IP是否在黑名单里面
}
程序员如何避免陷入“内卷”、选择什么技术最有前景,中国开发者现状与技术趋势究竟是什么样?快来参与「2020 中国开发者大调查」,更有丰富奖品送不停!
更多精彩推荐 ☞滴滴开源的损失!章文嵩将离职,曾是阿里开源“赶集人”,投身开源 20 年
☞红帽急了:新年的 RHEL 将有低成本或免费版
![]()
点 分 享 ![]()
点 收 藏 ![]()
点 点 赞 ![]()
点 在看