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

パイプライン化されたコマンドの応答をredisで無効にできますか?

    はい...少なくとも2.6では。これをLUAスクリプトで実行し、LUAスクリプトに空の結果を返すようにすることができます。ここでは、ブックスリーブクライアントを使用しています:

    const int DB = 0; // any database number
    // prime some initial values
    conn.Keys.Remove(DB, new[] {"a", "b", "c"});
    conn.Strings.Increment(DB, "b");
    conn.Strings.Increment(DB, "c");
    conn.Strings.Increment(DB, "c");
    
    // run the script, passing "a", "b", "c", "c" to
    // increment a & b by 1, c twice
    var result = conn.Scripting.Eval(DB,
        @"for i,key in ipairs(KEYS) do redis.call('incr', key) end",
        new[] { "a", "b", "c", "c"}, // <== aka "KEYS" in the script
        null); // <== aka "ARGV" in the script
    
    // check the incremented values
    var a = conn.Strings.GetInt64(DB, "a");
    var b = conn.Strings.GetInt64(DB, "b");
    var c = conn.Strings.GetInt64(DB, "c");
    
    Assert.IsNull(conn.Wait(result), "result");
    Assert.AreEqual(1, conn.Wait(a), "a");
    Assert.AreEqual(2, conn.Wait(b), "b");
    Assert.AreEqual(4, conn.Wait(c), "c");
    

    または、incrbyで同じことを行う 、引数として「by」番号を渡し、中央部分を次のように変更します。

    // run the script, passing "a", "b", "c" and 1, 1, 2
    // increment a & b by 1, c twice
    var result = conn.Scripting.Eval(DB,
        @"for i,key in ipairs(KEYS) do redis.call('incrby', key, ARGV[i]) end",
        new[] { "a", "b", "c" }, // <== aka "KEYS" in the script
        new object[] { 1, 1, 2 }); // <== aka "ARGV" in the script
    


    1. MongoDB-Javaドライバーを使用して配列からエントリを削除します

    2. ハウツー:Apache HBase RESTインターフェースを使用する、パート3

    3. MongoDBでのジャーナリングの管理

    4. redisスレーブのinfoコマンドによってリストされた期限切れのキーの数が私が見ているものと一致していません