packagecom.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和記憶體負載過高導致宕機。快取雪崩原因及解決方案 使用快取主要解決資料同步,並減少對資料庫訪問次數。因此,通常解決方案往往是使用互斥鎖,讓乙個執行緒訪問資料庫,並將資料更新到快取中,其他執行緒訪問快取中資料。如果...