欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

springboot多節(jié)點應(yīng)用里的雪花算法唯一性詳解

 更新時間:2024年12月31日 09:12:42   作者:張占嶺  
雪花算法在單節(jié)點下唯一,但在多副本Kubernetes環(huán)境中可能重復(fù),通過修改Pod名稱生成workId,解決了這個問題,同時避免了第三方組件和網(wǎng)絡(luò)請求,本文給大家介紹springboot多節(jié)點應(yīng)用里的雪花算法唯一性,感興趣的朋友一起看看吧

雪花算法的唯一性,在單個節(jié)點中是可以保證的,對應(yīng)kubernetes中的應(yīng)用,如果是橫向擴展后,進行多副本的情況下,可能出現(xiàn)重復(fù)的ID,這需要我們按著pod_name進行一個workId的生成,我還是建議通過不引入第三方組件和網(wǎng)絡(luò)請求的前提下解決這個問題,所以我修改了kubernetes的yaml文件。

  • k8s的yaml配置
apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app
spec:
  replicas: 3
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      containers:
      - name: my-container
        image: my-image:latest
        env:
        - name: POD_NAME
          valueFrom:
            fieldRef:
              fieldPath: metadata.name  # 獲取當(dāng)前 Pod 的名稱
  • 字符串(0~1024)數(shù)字方法,通過掩碼的方式
public static int stringToNumber(String input) {
        // 使用CRC32計算字符串的哈希值
        CRC32 crc = new CRC32();
        byte[] bytes = input.getBytes(StandardCharsets.UTF_8);
        crc.update(bytes);
        // 獲取哈希值并限制在0到1023之間
        long hashValue = crc.getValue();
        return (int) (hashValue % 1024);
    }
  • 獲取服務(wù)器機器碼
/**
	 * 獲取機器碼.
	 * @return
	 */
	public static String getUniqueMachineId() {
		StringBuilder uniqueId = new StringBuilder();
		try {
			// 獲取本機的IP地址
			InetAddress localHost = InetAddress.getLocalHost();
			uniqueId.append(localHost.getHostAddress()).append("_");
			// 獲取網(wǎng)絡(luò)接口并獲取MAC地址
			Enumeration<NetworkInterface> networkInterfaces = NetworkInterface.getNetworkInterfaces();
			while (networkInterfaces.hasMoreElements()) {
				NetworkInterface networkInterface = networkInterfaces.nextElement();
				byte[] mac = networkInterface.getHardwareAddress();
				if (mac != null) {
					for (int i = 0; i < mac.length; i++) {
						uniqueId.append(String.format("%02X", mac[i]));
						if (i < mac.length - 1) {
							uniqueId.append("-");
						}
					}
					uniqueId.append("_");
				}
			}
			// 添加系統(tǒng)信息作為補充
			String osName = System.getProperty("os.name");
			String osVersion = System.getProperty("os.version");
			String userName = System.getProperty("user.name");
			uniqueId.append(osName).append("_").append(osVersion).append("_").append(userName);
		}
		catch (Exception e) {
			e.printStackTrace();
		}
		return uniqueId.toString();
	}
  • ID生成器的改進
@Slf4j
public class IdUtils {
	static SnowFlakeGenerator snowFlakeGenerator;
	public static String generateId() {
		if (snowFlakeGenerator == null) {
			long podNameCode = stringToNumber(Optional.ofNullable(System.getenv("POD_NAME")).orElse(stringToNumber(getUniqueMachineId())));
			log.debug("podNameCode:{}", podNameCode);
			snowFlakeGenerator = new SnowFlakeGenerator(podNameCode);
		}
		return snowFlakeGenerator.hexNextId();
	}

到此這篇關(guān)于springboot~多節(jié)點應(yīng)用里的雪花算法唯一性的文章就介紹到這了,更多相關(guān)springboot雪花算法唯一性內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • JAVA常用API總結(jié)與說明

    JAVA常用API總結(jié)與說明

    這篇文章主要介紹了JAVA常用API總結(jié)與說明,包括JAVA線程常用API,JAVA隊列常用API,JAVA泛型集合算法常用API,JAVA并發(fā)常用API需要的朋友可以參考下
    2022-12-12
  • springboot連接不同數(shù)據(jù)庫的寫法詳解

    springboot連接不同數(shù)據(jù)庫的寫法詳解

    這篇文章主要介紹了springboot連接不同數(shù)據(jù)庫的寫法?,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-04-04
  • Java深入探究關(guān)鍵字abstract的使用

    Java深入探究關(guān)鍵字abstract的使用

    如果一個方法使用 abstract 來修飾,則說明該方法是抽象方法,抽象方法只有聲明沒有實現(xiàn)。需要注意的是 abstract 關(guān)鍵字只能用于普通方法,不能用于 static 方法或者構(gòu)造方法中
    2022-05-05
  • Java隨機生成驗證碼的實現(xiàn)示例

    Java隨機生成驗證碼的實現(xiàn)示例

    這篇文章主要介紹Java隨機生成驗證碼的實現(xiàn)方法,文中有相關(guān)的實現(xiàn)代碼供大家參考,具有一定的參考價值,需要的朋友可以參考下
    2023-08-08
  • java中實現(xiàn)四則運算代碼

    java中實現(xiàn)四則運算代碼

    本文給大家分享了幾個java中實現(xiàn)四則運算的代碼,有個人的也有網(wǎng)友的,代碼寫的不是很好,難免會有BUG,忘發(fā)現(xiàn)BUG的親們能提醒我下,好讓我改進
    2015-08-08
  • Java讀取properties文件內(nèi)容的幾種方式詳解

    Java讀取properties文件內(nèi)容的幾種方式詳解

    這篇文章主要介紹了Java讀取properties文件內(nèi)容的幾種方式詳解,讀取properties配置文件在實際的開發(fā)中使用的很多,本文來介紹常用的幾種實現(xiàn)方式,需要的朋友可以參考下
    2023-11-11
  • Kotlin內(nèi)存陷阱inline使用技巧示例詳解

    Kotlin內(nèi)存陷阱inline使用技巧示例詳解

    這篇文章主要為大家介紹了Kotlin內(nèi)存陷阱inline使用技巧示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-10-10
  • 一文帶你了解Java中的ForkJoin

    一文帶你了解Java中的ForkJoin

    這篇文章主要介紹了一文帶你了解Java中的ForkJoin,F(xiàn)orkJoinTask本身的依賴關(guān)系并不復(fù)雜,它與異步任務(wù)計算FutureTask一樣均實現(xiàn)了Future接口,下文更多相關(guān)資料,需要的小伙伴可以參考一下
    2022-04-04
  • IDEA手動添加junit4時出現(xiàn)的問題與解決方法

    IDEA手動添加junit4時出現(xiàn)的問題與解決方法

    這篇文章主要給大家介紹了關(guān)于IDEA手動添加junit4時出現(xiàn)的問題與解決方法,文中通過圖文介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • Java并發(fā)工具類CountDownLatch CyclicBarrier使用詳解

    Java并發(fā)工具類CountDownLatch CyclicBarrier使用詳解

    這篇文章主要為大家介紹了Java并發(fā)工具類CountDownLatch CyclicBarrier使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-06-06

最新評論