首先建立工具類randomidutil
/**
* 隨機數
* */
public
class
randomidutil
if(machineid > max_machine_num || machineid <0)
this
.datacenterid = datacenterid;
this
.machineid = machineid;
}/**
* 產生下乙個id
* * @return
*/public
synchronized
long
nextid()
if(currstmp == laststmp)
}else
laststmp = currstmp;
return
(currstmp - start_stmp)
<< timestmp_left // 時間戳部分
| datacenterid << datacenter_left // 資料中心部分
| machineid << machine_left // 機器標識部分
| sequence;
// 序列號部分
}private
long
getnextmill()
return mill;
}private
long
getnewstmp()
}
寫乙個啟動服務
首先寫個公共的服務
public
inte***ce
baseservice
import org.springframework.beans.factory.annotation.autowired;
import org.springframework.core.env.environment;
import org.springframework.stereotype.component;
import com.example.demo.service.baseservice;
import com.example.demo.utils.randomidutil;
@component
public
class
baseserviceimpl
implements
baseservice
}@override
public string getrandomid()
}
@component
public
class
baseserviceimpl
implements
baseservice
}@override
public string getrandomid()
}
建立幾個初始化類
import org.springframework.beans.factory.annotation.autowired;
import org.springframework.core.annotation.order;
import org.springframework.stereotype.component;
import com.example.demo.service.baseservice;
import lombok.extern.slf4j.slf4j;
@component
@order
(value =1)
@slf4j
public
class
baseserviceinitrunner
implements
}
最後直接呼叫就可以了
@autowired
baseservice baseservice;
string memberid = baseservice.
getrandomid()
;
談談雪花演算法的使用
618來臨之際,為了應對一些突發流量,購買了兩台乙個月的ecs用來臨時對部分專案擴容。其中乙個專案有用到雪花演算法來生成id,這個還是挺ok的。不過發現要在配置檔案中手動配置機器碼!配置的時候還要先知道目前配置了那些,這樣才可以避免重複。經過了解,除了會有單機單例項的情況,還會有單機多例項的情況。這...
《演算法競賽高階指南》 雪花雪花雪花
有n片雪花,每片雪花由六個角組成,每個角都有長度。第i片雪花六個角的長度從某個角開始順時針依次記為ai,1,ai,2,ai,6。因為雪花的形狀是封閉的環形,所以從任何乙個角開始順時針或逆時針往後記錄長度,得到的六元組都代表形狀相同的雪花。例如ai,1,ai,2,ai,6和ai,2,ai,3,ai,6...
《演算法 雪花演算法》
一 概述 snowflake 演算法 是 twitter 開源的分布式 id 生成演算法。應用場景 高效能的產生不重複id,支援集群的橫向擴充套件。二 原理 其核心思想就是 使用乙個 64 bit 的 long 型的數字作為全域性唯一 id。在分布式系統中的應用十分廣泛,且id 引入了時間戳,基本上...