很多場景需要用到訂單號,訂單號可能會有很多元素組成,比如:特定字元+時間+自增長。其中大多情況下必不可少的是自增長部分。現提供利用redis來實現自增長的幾種方式:
每天重置的自增長
/**
* 獲取訂單號自增長部分,每天重置
* @param key 主鍵
* @param model 格式模板,例如五位數: 00000
* @param maxnum 最大值
* @author lixiang
* @date 2023年04月18日 - 11:30
* @history 2023年04月18日 - 11:30 lixiang create.
*/public
static string getordernumber
(string key, string model,
int maxnum)
redisutil.
expire
(key, expiretime)
; numberformat nf =
newdecimalformat
(model)
;return nf.
format
(num)
;}
注意:到達最大值後需要怎麼處理需自行修改,上面這段**是適用於到達最大值後進行告警,因此我返回了null。
到達最大值後重置
/**
* 獲取訂單號自增長部分,到達最大值後重置
* @param key 主鍵
* @author lixiang
* @date 2023年04月18日 - 11:35
* @history 2023年04月18日 - 11:35 lixiang create.
*/public
static string getordernumber
(string key, string model,
int maxnum)
return nf.
format
(num)
;}
後續有想到其他的再補充吧! mysql 建立自增長訂單號
因為最近做專案需要,需要使用到,自定義的不重複的自增長的訂單號,在網上找了資料然後又加入了自己的修改,做成的mysql生成訂單號的儲存過程。drop procedure pp create procedure proc get no tname varchar 50 cname varchar 50...
訂單號生成
之前用uuid 因為太長改用16位因此在網上找到一下這種做法,年月日擷取 時間戳 在加隨機數 生成乙個訂單 獲取年份 var date j f c d e b h i a date gettime tostring var ordersn date new date getfullyear 2015...
mysql 訂單號主鍵 為什麼不用訂單號當做主鍵?
1.普通索引上儲存的值是主鍵的值,如果主鍵是乙個很長的字串並且建了很多普通索引,將造成普通索引占有很大的物理空間 2.自增id 在插入的時候可以保證相鄰的兩條記錄可能在同乙個資料塊,而訂單號的連續性在設計上可能沒有自增id好,導致連續插入可能在多個資料塊,增加了磁碟讀寫次數。innodb儲存引擎邏輯...