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