1.全局惟一性:不能出現重複的id號(基本的要求)redis
2.信息安全:防止惡意的用戶規矩id的規則來獲取數據算法
3.數據遞增:保證下一個id必定大於上一個id數據庫
1.UUID:通用惟一識別碼 16個字節128位的長數字安全
組成部分:當前日期和時間序列+全局惟一性網卡mac地址服務器
代碼:網絡
UUID.randomUUID()
如:35dd3497-dfe0-40fb-9cb2-b9624bad15a0dom
總結:分佈式
優勢:代碼實現簡單、不佔用寬帶、數據遷移不受影響性能
缺點:無序、沒法保證趨勢遞增、字符存儲、傳輸、查詢慢、不可讀google
2.Snowflake雪花算法:國外的twitter分佈式id生成算法
組成部分:高位隨機+毫秒數+機器碼(數據中心+機器id)+10位的流水號
1+41+10+10=62
代碼:百度or google
總結:
優勢:代碼實現簡單、不佔用寬帶、數據遷移不受影響、地位趨勢遞增
缺點:強依賴時鐘(多臺服務器時間必定要同樣,可統一用數據庫時間)、無序沒法保證趨勢遞增
3.redis:
組成部分:年份+當前這天屬於這一年的第幾天+小時+redis自增
2+3+2+5=12
代碼:使用redis的incr步長方法實現自增
總結:
優勢:不依賴數據、靈活方便、性能優於數據庫的、無單點故障
缺點:佔用網絡資源、性能比本地生成慢