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