XADD生成的1553439850328-0,就是Redis生成的消息ID,由兩部分組成:時間戳-序號。時間戳是毫秒級單位,是生成消息的Redis服務(wù)器時間,它是個64位整型(int64)。序號是在這個毫秒時間點內(nèi)的消息序號,它也是個64位整型。
可以通過multi批處理,來驗證序號的遞增
由于一個redis命令的執(zhí)行很快,所以可以看到在同一時間戳內(nèi),是通過序號遞增來表示消息的。
為了保證消息是有序的,因此Redis生成的ID是單調(diào)遞增有序的。由于ID中包含時間戳部分,為了避免服務(wù)器時間錯誤而帶來的問題(例如服務(wù)器時間延后了),Redis的每個Stream類型數(shù)據(jù)都維護(hù)一個latest_generated_id屬性,用于記錄最后一個消息的ID。若發(fā)現(xiàn)當(dāng)前時間戳退后(小于latest_generated_id所記錄的),則采用時間戳不變而序號遞增的方案來作為新消息ID(這也是序號為什么使用int64的原因,保證有足夠多的的序號),從而保證ID的單調(diào)遞增性質(zhì)。
強(qiáng)烈建議使用Redis的方案生成消息ID,因為這種時間戳+序號的單調(diào)遞增的ID方案,幾乎可以滿足你全部的需求。但同時,記住ID是支持自定義的,別忘了!