Redis原子計數器incr分布式唯一id生成器

2021-09-24 12:45:17 字數 678 閱讀 2981

在複雜分布式系統中,往往需要對大量的資料和訊息進行唯一標識。如在美團點評的金融、支付、餐飲、酒店、貓眼電影等產品的系統中,資料日漸增長,對資料庫的分庫分表後需要有乙個唯一id來標識一條資料或訊息,資料庫的自增id顯然不能滿足需求;特別一點的如訂單、騎手、優惠券也都需要有唯一id做標識。此時乙個能夠生成全域性唯一id的系統是非常必要的。

可用版本: >= 1.0.0

時間複雜度: o(1)

為鍵 key 儲存的數字值加上一。

如果鍵 key 不存在, 那麼它的值會先被初始化為 0 , 然後再執行 incr 命令。

如果鍵 key 儲存的值不能被解釋為數字, 那麼 incr 命令將返回乙個錯誤。z

本操作的值限制在 64 位(bit)有符號數字表示之內。

note

incr 命令是乙個針對字串的操作。 因為 redis 並沒有專用的整數型別, 所以鍵 key 儲存的值在執行 incr 命令時會被解釋為十進位制 64 位有符號整數。

返回值incr 命令會返回鍵 key 在執行加一操作之後的值。

**示例

redis> set unique_key 1

okredis> incr unique_key

(integer) 2

redis> get unique_key # 數字值在 redis 中以字串的形式儲存

「2」

原子迴圈計數器

現實當中很多場景,需要進行輪訓服務,比如輪訓在10個日誌檔案當中寫日誌,在10臺機器上輪訓的去呼叫以實現負載均衡,常規的做法,如tomcat的poller執行緒輪訓選擇,就採用 math.abs pollerrotater.incrementandget pollers.length 此地需要取原子...

原子迴圈計數器

感謝同事 孫棋 的投稿 現實當中很多場景,需要進行輪訓服務,比如輪訓在10個日誌檔案當中寫日誌,在10臺機器上輪訓的去呼叫以實現負載均衡,常規的做法,如tomcat的poller執行緒輪訓選擇,就採用 1math.abs pollerrotater.incrementandget pollers.l...

實現原子計數器

定義乙個單例模式的物件,宣告乙個原子計數物件 public class singleton private static singleton instance null private singleton public static singleton getinstance return inst...