1. 程式人生 > 程式設計 >Zookeeper全域性唯一ID生成方案解析

Zookeeper全域性唯一ID生成方案解析

系統唯一ID生成分案有很多種,例如:資料庫 auto_increment,UUID,Redis生成ID(Redis原子操作INCR和INCRBY),Twiitter的snowflake演算法,ZooKeeper生成ID,MongoDb的ObjectId,下面我們就看一下ZooKeeper實現分散式系統唯一ID。

public int idGen() throws Exception {
  String zkAddress = "127.0.0.1:2181";
  String idNode = "/id";

  //重試策略
  RetryPolicy retry = new RetryNTimes(3,2000);
  //建立連線客戶端
  CuratorFramework client = CuratorFrameworkFactory.builder().
      connectString(zkAddress).
      sessionTimeoutMs(5000).
      connectionTimeoutMs(10000).
      retryPolicy(retry).
      build();
  //啟動客戶端
  client.start();

  if (null == client.checkExists().forPath(idNode)) {
    client.create().withMode(CreateMode.PERSISTENT)
        .forPath(idNode);
  }
  Stat stat = client.setData().withVersion(-1).forPath(idNode);
  return stat.getVersion();
}

注意:換了ZooKeeper,資料就要從0開始,還沒有直接可以修改指定數字那裡開始,只能寫程式一點點的建立,直到達到你要想的資料 ,這是它最大的弊端。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。