🔥
Caster 開發日誌
  • Java
    • JVM Performance Tool
      • Java Debug Wire Protocol (JDWP) 的詳細介紹
      • JConsole 詳細介紹
    • Spring Boot
      • Spring Security
      • Spring Boot Admin
      • Spring Event
      • Spring AOP
      • Spring Boot JUnit 5
      • Apache Dubbo
    • Reflect 應用
    • ELK + F 建構
    • Socket.IO
    • OCR - 光學字元辨識
    • 讀取JAR resource文件
    • LocalTime & MySQL時間精度
    • Gradle multi module
    • MyBatis-Plus
    • Java Date operation
    • Java IP to Long
    • Apache Commons lang3 應用
      • Function 應用
    • Cloud Platform
      • Amazon S3
        • SDK V1
          • Bucket
        • SDK V2
          • Bucket
      • Google Cloud Platform
      • Azure Cloud
        • Storage
      • OVHcloud
        • Config
    • SSL/TLS工具
    • Util 工具
      • Jackson Json工具
      • Charles應用
      • JMeter – Performing Distributed Load Testing with Docker
    • Redis
      • Stream
      • Redisson 分布式鎖機制
      • Create Redis Cluster Using Docker
      • List Operations
    • Java 8
      • method & constructor Reference
      • CompletableFuture
      • FunctionInterface
      • Stream 應用
      • 繁簡轉換 - 簡易調整
    • MySQL
      • 建立測試用 流水號Table
      • SQL 效能調校 - Explain
      • SQL 效能調校 - Partition
      • 排程 - Event
    • Apache ShardingSphere
  • Kubernetes
    • 初入江湖(K8S)
    • 零中斷服務滾動更新
    • Kubernetes DNS
    • Ingress & Ingress Controller 教學
    • Ingress TLS Easy setup
  • 指令集
  • Telegram
  • SourceTree
    • 踩坑紀錄(ㄧ) - Git Flow
    • 踩坑紀錄(二) - 修改檔名
  • 專案統計
    • Robot
    • Recharge
  • GitHub
    • Actions
  • GitLab
    • 介紹 GitLab
    • 使用 Docker 自架 GitLab
    • 簡介 GitLab CI/CD
      • GitLab Runner 詳細介紹與設定方式
Powered by GitBook
On this page
  1. Java

Java IP to Long

IP地址使用整數存儲到數據庫,會這樣做也是最近遇到資料庫查詢瓶頸,進而研究該如何調整新增進資料庫的值,能讓查詢效能提升。

將 IP 地址轉換為整數並將其存入資料庫可以提高一些效能,尤其是當你需要進行 IP 地址範圍查詢或排序時。這種轉換方法稱為 "IP 地址壓縮" 或 "IP 地址轉換",可以幫助減少數據庫查詢的時間。 以下簡單的步驟和建議:

步驟 1:IP 地址轉換為整數

要將 IP 地址轉換為整數,你可以使用以下算法:

  1. 將 IP 地址分割成四個整數部分,例如 192.168.1.1 將分割為 [192, 168, 1, 1]。

  2. 每個部分都可以轉換為 8 位二進制數。

  3. 然後將這四個 8 位二進制數串接在一起,形成一個 32 位的二進制數。

  4. 最後,將這個 32 位的二進制數轉換為十進制整數。

以下是 Java 代碼示例,用於將 IP 地址轉換為整數:

// IP字串轉換成long
public static Long ipStringToLong(String ipStr) {
    String[] ips = ipStr.split("\\.");
    Long ipNum = 0l;
    for (String ip : ips) {
        ipNum = ipNum << 8;
        ipNum += Integer.parseInt(ip);
    }
    return ipNum;
}

// IP的long值轉換成字串
public static String ipNumberToString(Long ipNum) {
    long[] base = {0xff000000, 0x00ff0000, 0x0000ff00, 0x000000ff};
    StringBuilder sb = new StringBuilder();
    for (int i = 0; i < 4; i++) {
        sb.append((ipNum & base[i]) >> 8 * (3 - i));
        if (i != 3)
            sb.append(".");
    }
    return sb.toString();
}

public static void main(String[] args) {
    String ip = "172.20.160.120";
    Long ipNum = ipStringToLong(ip);
    System.out.println("ipNum >> " + ipNum);
    String ipStr = ipNumberToString(ipNum);
    System.out.println("ipStr >> " + ipStr);
    System.out.println("result >> " + ip.equals(ipStr));
}
// console log
ipNum >> 2887032952
ipStr >> 172.20.160.120
result >> true

步驟 2:將整數存入資料庫

一旦你將 IP 地址轉換為整數,你可以將整數存入資料庫的相應欄位中。通常,你會使用整數類型(如無符號整數)來存儲 IP 地址。這樣做的好處是數字比字符串更容易比較和排序,並且在查詢方面更有效率。

步驟 3:進行 IP 範圍查詢

當你需要查詢 IP 地址範圍時,你只需將要查詢的 IP 地址轉換為整數,然後使用標準的 SQL 查詢操作。例如,要查找位於某個 IP 地址範圍內的所有記錄,你可以執行以下查詢:

SELECT * FROM your_table
WHERE ip_address >= start_ip_integer
AND ip_address <= end_ip_integer;

注意事項:

  • 請確保在將 IP 地址轉換為整數時處理錯誤,並驗證 IP 地址的格式。

  • 在資料庫中存儲 IP 地址時,使用適當的整數類型,例如 UNSIGNED INT。

  • 始終儲存 IP 地址範圍的開始和結束整數,以便輕鬆進行範圍查詢。

型態

空間需求

範圍

TINYINT[(M)]

1 byte

Signed: -128 to 127 (-2^7 to 2^7-1) Unsigned: 0 to 255 (0 to 2^8-1)

SMALLINT[(M)]

2 bytes

Signed: -32768 to 32767 (-2^15 to 2^15-1) Unsigned: 0 to 65535 (0 to 2^16-1)

MEDIUNINT[(M)]

3 bytes

Signed: -8388608 to 8388607 (-2^23 to 2^23-1) Unsigned: 0 to 16777215 (0 to 2^24-1)

INT[(M)] INTEGER[(M)]

4 bytes

Signed: -2147483648 to 2147483647 (-2^31 to 2^31-1) Unsigned: 0 to 4294967295 (0 to 2^32-1)

這種方法可以提高 IP 地址查詢的效能,特別是當你需要處理大量 IP 地址記錄時。然而,請確保在代碼中適當地處理 IP 地址的轉換和驗證,以確保數據的一致性和安全性。

參考網站

PreviousJava Date operationNextApache Commons lang3 應用

Last updated 1 year ago

Java位元運算說明( 說明很清楚,對於新手很有幫助 ) :

前往