使用redis生成全域性唯一id

2021-08-09 18:39:58 字數 903 閱讀 6399

生成唯一客戶編碼

需求:1.id生成有一定規則,可識別

2.全域性保持唯一,支援分布式

思路:1.年月日+每日自增數  

2.每天23:59:59秒把自增數清0

優勢:1.通過年月日可以看出使用者註冊時間

2.通過自增數可以看出每日註冊量

使用redis原因:

redis本身單執行緒,不會出現併發問題

redis自身有過期策略

使用redisatomiclong 自增

主要**如下:

//通過key獲取自增並設定過期時間

public long generateid(string key,date date)

//組裝符合自己規則的id並設定過期時間

/*** @param key redis中的key值

* @param prefix 最後編碼的字首

* @param ha***pire redis是否使用過期時間生成自增id

* @param minlength redis生成的自增id的最小長度,如果小於這個長度前面補0

* @return

*/private string generatecode(string key,string prefix,boolean ha***pire,integer minlength)

id = redisservice.generateid(key,date);

if(id != null)

} catch (exception e)

return baseidgenerator.generatestringkey();

}//設定格式

生成全域性唯一ID

a庫 b庫 c庫支援同時寫入 a庫初始值為1,自增為3,獲取的值一次是1 4 7 b庫初始值為2,自增為3,獲取的值一次是2 5 8 c庫初始值為3,自增為3,獲取的值一次是6 6 9 獲取id時可從三庫輪詢獲取 此方法使用資料庫原有的功能,所以相對簡單 能夠保證唯一性 能夠保證遞增性 id 之間的...

SnowFlake 生成全域性唯一id

public class snowflakeutil 外部呼叫獲取snowflakeutil的例項物件,確保不可變 return public static snowflakeutil get 初始化構造,無參構造有參函式,預設節點都是0 public snowflakeutil 設定機器節點和資料...

(備忘)c 中生成全域性唯一id

c 在要生成唯一標示的id,不用自己去設計演算法,直接用boost中的boost uuids random generator 隨機生成器即可。生成隨機數 guid 即globally unique identifier 全球唯一識別符號 也稱作 uuid universally unique id...