商交易系統高併發分佈式訂單號生成策略redis
1、要求:算法
1.全局惟一性,不能重複數據庫
2.信息安全加密防止用戶根據id規則獲取數據安全
3.數據遞增,保證下一個id必定大於上一個id網絡
二,策略併發
1.UUID 惟一識別碼,16個字節 (128位)分佈式
組成部分:當前日期+時間+時鐘的序列+mac地址 高併發
uuid 有幾個實現版本,好比jdk 自帶的uuid性能
優勢:生成簡單,不佔用寬帶,本地生成,數據遷移不影響。優化
缺點:字母存儲,無序,沒法保證趨勢遞增,查詢慢,不可讀
2.snowflake(雪花twitter開源 分佈式id算法)
41字節毫秒+10字節的機器id+10版本號,國內有不少平臺有將其實現和優化
優勢:本地生成,不佔寬帶,毫秒在高位,低位是趨勢遞增。
缺點:依賴時鐘 若是時間回撥可能會重複,效率比uuid慢
3. 數據庫
優勢:代碼實現簡單,性能ok,數字排序,可讀性強
缺點:受限於數據庫,單點故障,擴容麻煩,須要插入後才能獲取id增長查詢數據庫主從延遲master才能查到
4.redis 集羣
格式:12位=年2位+當年第幾天3+小時2+自增5
優勢:不依賴數據庫,靈活,沒有單點故障,性能優於數據庫
缺點:網絡資源,須要增長額外服務插件
總結:
uuid | Token ,圖片id等 | ※※ |
snowflake | Elk,mq,業務系統 | ※※※※ |
數據庫 | 併發不大,業務增加不快 | ※※※ |
redis | 業務系統 | ※※※※※ |