{eval=Array;=+count(Array);}
1、UUID
2、數據庫自增
3、Snowflake
4、Redis
這種方式比較方便,有現成可用的JAR包,但是也有缺點:ID可讀性不好,而且會造成索引樹頻繁頁分裂,影響數據庫性能和空間使用
維護一張序列表。考慮到性能問題,不必每次生成ID都去操作數據庫,可以設置一定的步長比如1000,每次從表中拿1000個序列號,從每臺服務器內存中線性去取
維護一個序列號鍵值對,利用Redis自增的原子性,生成序列號
同一毫秒可以產生ID數量4194304個,優點是完全內存操作性能好,缺點是依賴于系統時鐘一致性。如果某臺機器的系統時鐘回撥,有可能造成ID沖突,或者ID亂序
最重要的還是根據項目的場景,尤其是并發量,選擇最合適的方法
請點擊關注按鈕【IT徐胖子】會持續為大家奉獻互聯網和技術干貨內容,感謝支持
由于是高并發情況,所以不建議使用數據庫自增ID,可以參考如下方案:
1、redis自增id
2、UUID
3、時間戳+隨機數
4、Twitter的snowflake算法
5、利用zookeeper生成唯一id,性能不如redis
6、MongoDB的ObjectId,和snowflake算法類似
隨便哪個程序員都可以寫出來一個生成訂單的算法,除了美團、淘寶這種需要考慮訂單重復,大多數企業還是發愁沒有訂單的狀態,需要考慮這個問題的企業應該不差錢了,希望我的公司有機會讓我來解決這個問題。
1:獲取當前日期作為訂單號的前8位
2:獲取uuid,它是通用唯一識別碼,進行hashcode轉碼仍然可以保證其唯一性,可以取12位
3:日期和uuid轉碼之后的12位拼接,一共20位,可以生成唯一訂單號
最簡單的辦法就是用用戶名?ip?時間生成訂單號,然后計算哈希值后做一定轉換就可以生成唯一訂單號。不過唯一的問題就是不太好查。畢竟這種訂單號沒有任何規律可言,后期查詢是個大麻煩。其實最建議的方式就是分渠道分地區建立訂單號。就和身份證號生成機制一樣,各個地區可以獨立生成身份證號,最后合在一起還沒有任何問題。
用算法呀。對訂單這種,很簡單。
商品id +用戶id+時間戳+隨機數+自增數
就能保證唯一性。現實中,沒哪個用戶去高并發下單(除非bug)。
看一下美團的leaf
https://tech.meituan.com/2019/03/07/open-source-project-leaf.html0
回答0
回答0
回答0
回答0
回答0
回答0
回答0
回答0
回答0
回答