mysql 设置的黑名单_利用MySQL实现域名黑名单过滤10W记录1ms匹配

先说一下这个需求,需要判断某个域名是否在黑名单中。黑名单中的域名一旦设置,其下任何级的域名都认为是在黑名单中。

如黑名单中加入a.com,则a.com、www.a.com、1.2.3.a.com等都算进入黑名单。

如黑名单中加入com,则所有com域名都算进入黑名单。下面出现的域名如带*都为违法域名

一开始我使用了like去做查询,如我要做判断的域名是www.a.com。SQL语句如下:

数据量少的情况下速度很快,我测试了一下10W黑名单时,大概在200毫秒左右。

虽然黑名单一般不会有这么多,但是我有研究的兴趣,所以就继续思考。

接下来想到的办法,10W黑名单时,耗时1-3毫秒左右。

我在表中加入了hash字段,设为索引,这里直接用了md5对域名进行处理。

然后在php中在查询前对域名进行处理。因为域名是用.来分割一段一段的,所以我把每一段的md5都计算出来,最终进行in查询。由于域名的一段一段不会太多,所以并不需要担心性能问题。

比如域名是www.baidu.com,那么我将com、baidu.com、www.baidu.com分别md5,最终代入in查询条件中。

代码如下:

最终结果:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值