sql >> データベース >  >> NoSQL >> Redis

Redis C#-トランザクションでのIncr値の使用

    redis MULTI / EXECユニットには、できないという基本的な機能があります。 操作中に結果を取得します。そのため、あなたが求めることを行うには2つの一般的な方法があります。

    1. Luaを使用する(ScriptEvaluate[Async] ); Luaスクリプトはサーバー上で最初から最後まで実行され、効率的であり、ラウンドトリップ時間(遅延または帯域幅)または他の接続との競合に関連するすべての問題を回避します
    2. 現在の値を読み取る楽観的なループを使用してから、SE-Redisで制約を追加するトランザクションを作成します 読み取ったばかりの値が同じであり、トランザクション内で副作用を実行すること。ライブラリは、これを堅牢にするために必要なWATCHなどの機構を調整しますが、制約条件が無効であることが判明した場合(つまり、ライブラリがfalseを返す場合) )、最初からすべてをやり直す必要があります

    率直に言って、最近私は常に人々をオプション1に導きます。オプション2は、サーバー側のLuaスクリプトが利用できない場合にのみ「魅力的」です(そして私はその用語をまったく間違って使用しています)。

    私はPCを使用していませんが、スクリプトは次のようになると思います。

    local id = redis.call("incr", KEYS[1])
    redis.call("hset", KEYS[2], tostring(id), ARGV[1])
    return id
    



    1. Spring BootでCrudリポジトリを使用してRedisから結果を取得できませんか?

    2. 単一のnode.jsプロジェクトのマングースと複数のデータベース

    3. MongoDBサンプルオペレーター

    4. Mongoose/MongoDBの結果フィールドがJavascriptで未定義で表示される