SnowFlakeId 分布式雪花id演算法

2022-02-11 07:18:24 字數 1932 閱讀 7501

package

com.jn.baseservice.utils;

import

com.jn.baseservice.common.number;

import

lombok.getter;

import

lombok.setter;

import

lombok.extern.log4j.log4j2;

import

org.apache.commons.lang3.stringutils;

import

@log4j2

@getter

@setter

public

class

snowflake

if (machineid > max_machine_num || machineid < 0)

snowflake.datacenterid =datacenterid;

snowflake.machineid =machineid;

}/*** 初始化檢查**

@param

context

*/public

synchronized

static

void

long iphashcode =getipcode();

log.info("iphashcode:{}", iphashcode);

check = true

; }

/*** 獲取ip**

@return

*/public

static

long

getipcode()

} catch

(exception e)

log.info("處理後ip:" +httpstring);

}/*** 實際獲取id**

@return

*/public

synchronized

static

long

nextid()

if (currstamp ==lasttimestamp)

} else

lasttimestamp =currstamp;

//就是用相對毫秒數、機器id和自增序號拼接

return (currstamp - start_timestamp) << timestamp_left //

時間戳部分

| datacenterid << data_center_left //

資料中心部分

| machineid << machine_left //

機器標識部分

| sequence; //

序列號部分

}

/*** 獲取時間戳**

@return

*/private

static

long

getnextmill()

return

mill;

}}

//

獲取雪花id

public

static

long

getsnowflakeid()

return

snowflake.nextid();

}

分布式 分布式鎖

本質是利用redis的setnx 方法的特性來加鎖,setnx 即key不存在則設定key,否則直接返回false,要求在分布式系統中使用同乙個redis服務,以下提供兩種解決方案 1 直接使用redistemplate 這其實並不能完全保證高併發下的安全問題,因為可能在鎖過期之後該執行緒尚未執行完...

分布式 分布式事務

是資料庫執行過程中的乙個邏輯單位,由乙個有限的資料庫操作序列構成。事務的acid四大特性 原子性 atomicity 事務作為乙個整體被執行。一致性 consistency 從乙個一致的狀態轉換到另乙個一致的狀態。隔離性 isolation 多個事務併發執行時,併發事務之間互相影響的程度。永續性 d...

redis分布式鎖java實現解決快取雪崩

快取雪崩 因為快取失效 key生存時間到期 導致所有請求都去查詢資料庫,導致資料庫cpu和記憶體負載過高導致宕機。快取雪崩原因及解決方案 使用快取主要解決資料同步,並減少對資料庫訪問次數。因此,通常解決方案往往是使用互斥鎖,讓乙個執行緒訪問資料庫,並將資料更新到快取中,其他執行緒訪問快取中資料。如果...