分布式并發(fā)下唯一ID的生成規(guī)則 (python 多線程模擬并發(fā) 檩互,QPS以秒為單位如迟, 不考慮 python GIL)
1.使用 redis 的 incr (redis 為單線程, 原子性操作)
1.incr 原子性操作即返回加1操作后的值,可直接使用奢人。避免多操作而使用事務(wù)谓媒。
2.持久性:只有一個(gè)key,可開啟RDB/AOF,或者判斷在nosql key失效時(shí)何乎,獲取DB表中最后一個(gè)生成的id并set寫入句惯,保持可持續(xù)使用。
3.性能:內(nèi)存操作支救,性能優(yōu)良
4.災(zāi)難恢復(fù)抢野,數(shù)據(jù)自動(dòng)恢復(fù),腳本檢測(cè)set進(jìn)最后一個(gè)生成的ID
redis> SET mykey "10"
OK
redis> INCR mykey
(integer) 11
redis> GET mykey
"11"
2.使用 mysql 表的唯一自增主鍵 (可用雙實(shí)例/物理機(jī) 錯(cuò)開id(奇偶數(shù) +1/+2))
1.mysql的原子性各墨,可保證自增列不會(huì)產(chǎn)生重復(fù)的id
2.持久性:存在于mysql數(shù)據(jù)表中指孤,持久化于磁盤
3.性能:數(shù)據(jù)寫入操作,可用錯(cuò)開id(+1/+2)雙寫