C#分散IDジェネレーター

高洛峰
高洛峰オリジナル
2016-11-04 16:48:472024ブラウズ

はじめに

これはTwitterのsnowflakeに基づいて書かれています。ここに中国語の紹介があります。

C#分散IDジェネレーター


上の図に示すように、一番左の符号ビット(0に固定)を除いた64ビットID。生成された ID がすべて正であることを確認するため、まだ 63 ビットが利用可能です

次のコードは、中央部分の 10 ビットの作業マシン ID が変更されていない点を除いて、図の桁の割り当てとは若干異なります。タイムスタンプとシリアル番号の桁数は必要に応じて変更できます。つまり、中央の作業マシン ID を左または右に移動できます。コードの説明

これを使用する場合は、新しい IdCreator インスタンスが必要であり、次に Create() メソッドを呼び出して ID 番号を生成し、ID 番号の一意性を確保するために IdCreator のインスタンスを静的変数に割り当てる必要があります。分散デプロイメントの場合は、instanceID パラメーターを IdCreator のコンストラクターに渡す必要があります。各デプロイメントには、0 ~ 1023 の範囲の異なる値が必要です。コンストラクターの IndexBitLength パラメーターは、そのコンストラクターの「シリアル番号」の長さを表します。図の右端は 12 ビットに固定されなくなり、範囲は 1 ~ 32 になります。 残りの利用可能なビットはタイムスタンプ用に残されます

注: 必要に応じて、IdCreator クラスのタイムスタンプは秒単位で測定されます。ミリ秒に変更するには、コードを long ts = Harry.Common.Utils.GetTimeStamp () / 1000; に変更するだけです。これで完了です。

サンプルコード

りー

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。