1

ドキュメントを検索しましたが、IRedisTypedClient の "GetNextSequence" を追跡するために redis データベース (もしあれば) に入れられたものが見つかりませんでした。これは、自分のキー以外の追加のキーが表示されるようになったためです。これらの余分なキーを取得するために何か間違ったことをしているのか、それとも特定の値を追跡する ServiceStack の方法なのかはわかりません。もしそうなら、いつこれを行うのか知りたいので、表示されているすべての「ブレッドクラム」が何であるかを知っています.

これが私の簡単な例です:

private IRedisTypedClient<BucketInfo> redisBucket;
redisBucket = Redis.As<BucketInfo>();
var newBucketInfo = new BucketInfo {
    DB = redisBucket.GetNextSequence (),
    policy = bucketPolicy,
};

GetNextSequence を実行すると、自分でストレージを行う前に、seq:BucketInfo を redis データベースに入れます。これは予想通りですか?

4

1 に答える 1

1

IRedisTypedClient<T>.GetNextSequence()非常に単純な操作です。SequenceKeyキーに格納されている値をインクリメントするだけです (デフォルトでは という名前です"seq:TypeName")。したがって、あなたの場合、この操作は次のように変換されます

INCR seq:BucketInfo

ここに実装がありますが、Redis MONITORコマンドを使用して、舞台裏で何が起こっているかを簡単に確認することもできます。Redis サーバーによって処理されたすべてのコマンドを Redis クライアントにストリーミングします。

を呼び出さない場合、この値はインクリメントされないことに注意してくださいGetNextSequence()。つまり、受信した以外GetNextSequence()の ID を持つエンティティを保存すると、その ID がエンティティ ID セットに追加され、エンティティが保存されますが、これは次に生成される ID には影響しません。逆もまた同様です -GetNextSequence()戻り値を格納するエンティティに割り当てずに呼び出すことができます。それは次のIDのみをインクリメントします。

そのため、追加のキーが表示された場合は、Redis によって生成されたシーケンシャル ID を割り当てずにいくつかのエンティティを保存した可能性があります。

于 2019-03-31T21:29:49.073 に答える