无法在当前版本的 redis 上重现这一点 - 在这里看起来不错:
using (var con = Config.GetUnsecuredConnection())
{
var key = "somekey1";
// set the field value and expiration
var task = con.Hashes.Set(1, key, "field1", Encoding.UTF8.GetBytes("hello world"))
.ContinueWith((x) => con.Keys.Expire(1, key, 7200));
task.Wait();
var task2 = con.Hashes.Set(1, key, "field2", "fooobar");
task2.Wait();
var task3 = con.Hashes.GetAll(1, key);
task3.Wait();
Assert.AreEqual(2, task3.Result.Count);
Assert.AreEqual("hello world", Encoding.UTF8.GetString(task3.Result["field1"]));
Assert.AreEqual("fooobar", Encoding.UTF8.GetString(task3.Result["field2"]));
}
或者,更有效(使用流水线,不等待):
using (var con = Config.GetUnsecuredConnection())
{
var key = "somekey1";
// set the field value and expiration
con.Hashes.Set(1, key, "field1", Encoding.UTF8.GetBytes("hello world"));
con.Keys.Expire(1, key, 7200);
con.Hashes.Set(1, key, "field2", "fooobar");
var task = con.Hashes.GetAll(1, key);
con.Wait(task);
Assert.AreEqual(2, task.Result.Count);
Assert.AreEqual("hello world", Encoding.UTF8.GetString(task.Result["field1"]));
Assert.AreEqual("fooobar", Encoding.UTF8.GetString(task.Result["field2"]));
}
所以是的:应该工作,并且似乎工作。注意我在本地使用 2.4.5;2.0现在已经很老了,并且有许多重要的错误。完全有可能在服务器上存在与 HSET plus EXPIRE 相关的错误- 在这种情况下,客户端库无法弥补。
我强烈建议使用比 2.0 更“当前”的 redis-server 版本。如果一个不可用,您可能想尝试dmajkic二进制文件(转到 2.4.5)或 [MSOpenTech]*https://github.com/MSOpenTech/redis)源。然而!!!这仅用于本地调试。对于当前的生产工作(即直到 MSOpenTech 代码快乐-快乐),我建议使用 linux 服务器来托管 redis。Ubuntu 服务器运行良好。