資料庫 ID 生成方案 Redis

2021-10-01 04:22:40 字數 526 閱讀 4232

使用 redis 來生成分布式 id,其實和利用 mysql 自增 id 類似,可以利用 redis 中的 incr 命令來實現原子性的自增與返回,比如:

127.0.0.1:6379> set id 1   // 初始化自增 id 為1

ok127.0.0.1:6379> incr id // 增加1,並返回

(integer) 2

127.0.0.1:6379> incr id // 增加1,並返回

(integer) 3

使用 redis 的效率是非常高的,但是要考慮持久化的問題。redis 支援 rdb 和 aof 兩種持久化的方式。

rdb 持久化相當於定時打乙個快照進行持久化,如果打完快照後,連續自增了幾次,還沒來得及做下一次快照持久化,這個時候 redis 掛掉了,重啟 redis 後會出現 id 重複。

aof 持久化相當於對每條寫命令進行持久化,如果 redis 掛掉了,不會出現 id 重複的現象,但是會由於 incr 命令過多,導致重啟恢復資料時間過長。

資料庫 ID 生成方案 號段模式

還可以使用號段的方式來獲取自增 id,號段可以理解成批量獲取。比如從資料庫獲取 id 時,就可以批量獲取多個 id 並快取在本地,提公升效率。比如每次從資料庫獲取 id 時,就獲取乙個號段,如 1,1000 這個範圍表示1000個 id,業務應用在請求提供 id 時,只需要在本地從1開始自增並返回,...

資料庫 ID 生成方案 資料庫多主模式

將兩個資料庫組成主從模式的集群,正常情況下,是可以解決資料庫的可靠性問題,但如果主庫掛掉後,資料沒有及時同步到從庫,這個時候就會出現 id 重複的問題。可以使用雙主模式集群,也就是兩個例項都能單獨的生產自增id,這樣能夠提高效率,不過就需要單獨給每個資料庫例項配置不同的起始值和自增步長。第一台 my...

基於資料庫構建分布式的ID生成方案

在分布式系統中,生成全域性唯一id,有很多種方案,但是在這多種方案中,每種方案都有有缺點,下面我們之針對通過常用資料庫來生成分布式id的方案,其它方法會在其它文中討論 這裡我們討論mysql生成id。因為mysql本身可以auto increment和auto increment offset來保證...