Skip to content

Ip2region离线IP地址查询

什么是 Ip2region

ip2region是一个离线IP地址定位库和IP定位数据管理框架,具有10微秒级别的查询效率,提供了众多主流编程语言的 xdb 数据生成和查询客户端实现。

使用方式

Spring Boot 项目,直接在项目中引入 starter 组件:

依赖引入

xml
<dependency>
    <groupId>org.ballcat</groupId>
    <artifactId>ballcat-spring-boot-starter-ip2region</artifactId>
    <version>2.0.0-SNAPSHOT</version>
</dependency>

配置

配置说明

配置项默认值说明
ballcat.ip2region.file-locationclasspath:ip2region/ip2region.xdbip2region.xdb 文件的地址,默认内置的文件
ballcat.ip2region.cache-typexdbip2region查询缓存方式

cache-type配置说明

取值说明备注
none完全基于文件的查询
vector_index缓存 VectorIndex 索引我们可以提前从 xdb 文件中加载出来 VectorIndex 数据,然后全局缓存,每次创建 Searcher 对象的时候使用全局的 VectorIndex 缓存可以减少一次固定的 IO 操作,从而加速查询,减少 IO 压力。
xdb缓存整个 xdb 数据我们也可以预先加载整个 ip2region.xdb 的数据到内存,然后基于这个数据创建查询对象来实现完全基于文件的查询,类似ip2region 1.x的 memory search。

注意

一般情况下,ip2region.xdb我们会与官方保持同步,如果没有自己加工IP的话,一般不需要调整对应配置

基本使用

引入依赖后会自动注册一个 Ip2regionSearcher的bean, 使用该bean即可

参考: 示例

注意事项

maven 自定义 ip2region.db 注意事项

如果通过如下配置启用maven资源过滤时,需要额外注意:

xml
<build>
    <resources>
        <resource>
            <directory>src/main/resources</directory>
            <filtering>true</filtering>
        </resource>
    </resources>
</build>

此时,maven resources 拷贝文件是默认会做 filter,会导致我们的文件发生变化,导致不能读,pom 中你需要添加下面的配置。

xml
<plugin>
    <artifactId>maven-resources-plugin</artifactId>
    <configuration>
        <nonFilteredFileExtensions>
            <nonFilteredFileExtension>xdb</nonFilteredFileExtension>
        </nonFilteredFileExtensions>
    </configuration>
</plugin>

FAQ

ip2region支持IPV6么

截至目前官方版本是不支持IPV6的。

ip2region 2.x比1.x提升在哪里

ip2region 1.x的数据在数据量超过70万行时,ip2region的btree 算法查询会有问题,需要使用 binary 或者 memory 算法,btree 算法部分数据查询会出错,2.x主要提升为不限制原始数据量。

封装的ip2region插件是否线程安全

默认配置下,Ip2regionSearcher的检索结果是线程安全的,调整cache-type配置为vector_index或者none时,线程安全性由开发者自行保证。