Redis
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> Redis

Redis có thể vô hiệu hóa các câu trả lời cho các lệnh pipelined không?

Có ... ít nhất là trong 2.6. Bạn có thể thực hiện việc này trong tập lệnh LUA và chỉ cần tập lệnh LUA trả về kết quả trống. Đây là nó đang sử dụng ứng dụng booksleeve:

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");

Hoặc làm điều tương tự với incrby , chuyển các số "by" làm đối số, thay đổi phần giữa thành:

// 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. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. ngoại lệ lồng nhau là redis.clients.jedis.exceptions.JedisConnectionException:Không thể lấy tài nguyên từ nhóm

  2. Redis chỉ cho phép biểu diễn chuỗi nhưng không cho phép giá trị số

  3. Làm thế nào để mở rộng máy chủ Node.js WebSocket Redis?

  4. Làm khô một RedisTemplate chung trong Mùa xuân 4

  5. Docker-compile - Redis ở mức 0.0.0.0 thay vì 127.0.0.1