GEOIP-PHP-跟据用户IP获取所在国家高效解决方案 (geoip.dat)

VPS云服务器 2025-04-20 21:01:58 浏览
PHP

8款MAC笔记本电脑(4核16G 固态硬盘) docker 环境运行结果:用时:0.834秒有效IP: 1723 个

随机生成的IP有一部分无效,相当于1秒执行了 2000+ 随机IP查询,已经相当高了,这种高IO 的查询操作固态硬盘是主要因素

geoip2

如果有更高的效率需求,可以将 IP数据库转入 REDIS跟据CSV版本的IP数据,当前版本的 IPv4(IPv6 应该需求不多) 数据库仅有 37万多条记录(3711110),

GeoLite2-Country-Blocks-IPv4.csv 内容示例:

Network,geoname_id,registered_country_geoname_id,represented_country_geoname_id,is_anonymous_proxy,is_satellite_provider1.0.0.0/24,2077456,2077456,,0,01.0.1.0/24,1814991,1814991,,0,01.0.2.0/23,1814991,1814991,,0,01.0.4.0/22,2077456,2077456,,0,01.0.8.0/21,1814991,1814991,,0,0…223.255.244.0/22,1269750,1269750,,0,0223.255.248.0/22,1819730,1819730,,0,0223.255.252.0/23,1814991,1814991,,0,0223.255.254.0/24,1880251,1880251,,0,0223.255.255.0/24,2077456,2077456,,0,0

其中第一列 network 为网段/子网掩码,geoname_id 等列关联了另一个 csv 中的国家信息元数据。

可以以网段为键名(可IP2Long 转INT),子网掩码+对应的国家二字码为键值 存入 redis, 以内存换取更快的IO操作,相信查询效率会有更大提升。

国为当前项目是在计划任务中执行,有消息队列缓冲,可多台计划任务服务器并行处理。官方 composer 库效率也足够高,暂时不折腾了,以后有机会了再尝试 REDIS 方案

本文版权声明本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请联系本站客服,一经查实,本站将立刻删除。

发表评论

热门推荐