最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

雪花算法的唯一性,在單個(gè)節(jié)點(diǎn)中是可以保證的,對(duì)應(yīng)kubernetes中的應(yīng)用,如果是橫向擴(kuò)展后,進(jìn)行多副本的情況下,可能出現(xiàn)重復(fù)的ID,這需要我們按著pod_name進(jìn)行一個(gè)workId的生成,我還是建議通過(guò)不引入第三方組件和網(wǎng)絡(luò)請(qǐng)求的前提下解決這個(gè)問(wèn)題,所以我修改了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ù)字方法,通過(guò)掩碼的方式
public static int stringToNumber(String input) {
        // 使用CRC32計(jì)算字符串的哈希值
        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ù)器機(jī)器碼
/**
	 * 獲取機(jī)器碼.
	 * @return
	 */
	public static String getUniqueMachineId() {
		StringBuilder uniqueId = new StringBuilder();
		try {
			// 獲取本機(jī)的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)信息作為補(bǔ)充
			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生成器的改進(jìn)
@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é)點(diǎn)應(yīng)用里的雪花算法唯一性的文章就介紹到這了,更多相關(guān)springboot雪花算法唯一性內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SpringBoot實(shí)現(xiàn)嵌入式 Servlet容器

    SpringBoot實(shí)現(xiàn)嵌入式 Servlet容器

    傳統(tǒng)的Spring MVC工程部署時(shí)需要將WAR文件放置在servlet容器的文檔目錄內(nèi),而Spring Boot工程使用嵌入式servlet容器省去了這一步驟,本文就來(lái)設(shè)置一下相關(guān)配置,感興趣的可以了解一下
    2023-12-12
  • mybatis plus 的動(dòng)態(tài)表名的配置詳解

    mybatis plus 的動(dòng)態(tài)表名的配置詳解

    這篇文章主要介紹了mybatis plus 的動(dòng)態(tài)表名的配置詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • 淺談java日志格式化

    淺談java日志格式化

    不管我們使用何種語(yǔ)言開(kāi)發(fā),一旦程序發(fā)生異常,日志是一個(gè)很重要的數(shù)據(jù)。但是并不是意味著打印的日志越多越好,我們需要的是有用的日志。下面小編來(lái)和大家一起學(xué)習(xí)以下知識(shí)
    2019-05-05
  • MyBatis-Plus中實(shí)現(xiàn)自定義復(fù)雜排序邏輯的詳細(xì)步驟

    MyBatis-Plus中實(shí)現(xiàn)自定義復(fù)雜排序邏輯的詳細(xì)步驟

    這篇文章主要介紹了MyBatis-Plus中實(shí)現(xiàn)自定義復(fù)雜排序邏輯,通過(guò)使用MyBatis-Plus的QueryWrapper和SQL原始片段,我們可以靈活地實(shí)現(xiàn)復(fù)雜的數(shù)據(jù)排序邏輯,這種方法尤其適用于需要對(duì)數(shù)據(jù)進(jìn)行特定規(guī)則排序的場(chǎng)景,需要的朋友可以參考下
    2024-07-07
  • Java實(shí)現(xiàn)List與數(shù)組互相轉(zhuǎn)換的兩種方法

    Java實(shí)現(xiàn)List與數(shù)組互相轉(zhuǎn)換的兩種方法

    在 Java 編程中,List 和數(shù)組是兩種常用的數(shù)據(jù)結(jié)構(gòu),List 提供了動(dòng)態(tài)大小、豐富的操作方法,而數(shù)組則以其高效的隨機(jī)訪問(wèn)和內(nèi)存效率著稱,在實(shí)際開(kāi)發(fā)中,我們經(jīng)常需要在這兩者之間進(jìn)行轉(zhuǎn)換,本文將深入探討 List 與數(shù)組之間的相互轉(zhuǎn)換,需要的朋友可以參考下
    2025-12-12
  • Java Swing JFrame窗口的實(shí)現(xiàn)

    Java Swing JFrame窗口的實(shí)現(xiàn)

    這篇文章主要介紹了Java Swing JFrame窗口的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • SpringBoot整合SpringSecurity認(rèn)證與授權(quán)

    SpringBoot整合SpringSecurity認(rèn)證與授權(quán)

    在項(xiàng)目開(kāi)發(fā)中,權(quán)限認(rèn)證是很重要的,尤其是一些管理類的系統(tǒng),對(duì)于權(quán)限要求更為嚴(yán)格,本文主要介紹了SpringBoot整合SpringSecurity認(rèn)證與授權(quán),感興趣的可以了解一下
    2023-11-11
  • JAVA使用ElasticSearch查詢in和not in的實(shí)現(xiàn)方式

    JAVA使用ElasticSearch查詢in和not in的實(shí)現(xiàn)方式

    今天小編就為大家分享一篇關(guān)于JAVA使用Elasticsearch查詢in和not in的實(shí)現(xiàn)方式,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2018-12-12
  • springboot中設(shè)置定時(shí)任務(wù)的三種方法小結(jié)

    springboot中設(shè)置定時(shí)任務(wù)的三種方法小結(jié)

    在我們開(kāi)發(fā)項(xiàng)目過(guò)程中,經(jīng)常需要定時(shí)任務(wù)來(lái)幫助我們來(lái)做一些內(nèi)容,本文介紹了springboot中設(shè)置定時(shí)任務(wù)的三種方法,主要包括@Scheduled注解,Quartz框架和xxl-job框架的實(shí)現(xiàn),感興趣的可以了解一下
    2023-12-12
  • SpringBoot中YAML配置文件實(shí)例詳解

    SpringBoot中YAML配置文件實(shí)例詳解

    前面一直在使用properties配置文件,spring boot也支持yaml配置文件,下面這篇文章主要給大家介紹了關(guān)于SpringBoot中YAML配置文件的相關(guān)資料,需要的朋友可以參考下
    2023-04-04

最新評(píng)論

高邮市| 阳谷县| 五指山市| 开封市| 井陉县| 自治县| 天津市| 清镇市| 龙游县| 容城县| 合肥市| 沂水县| 平武县| 丰都县| 新巴尔虎右旗| 建湖县| 行唐县| 岳阳市| 台州市| 广安市| 习水县| 特克斯县| 南皮县| 淳安县| 佛坪县| 蓝山县| 唐河县| 日照市| 保靖县| 吉安市| 理塘县| 巫山县| 海伦市| 蓬溪县| 晋州市| 西畴县| 恩施市| 高阳县| 孟州市| 昌都县| 墨玉县|