かなり最新のバージョンの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とEXPIREに関連するバグがあった可能性は十分にあります。その場合、クライアントライブラリが補正できることはあまりありません。
2.0よりも「最新の」ビルドのredis-serverを使用することを強くお勧めします。利用できない場合は、dmajkicバイナリ(2.4.5に移行)または[MSOpenTech] * https://github.com/MSOpenTech/redis)ソースを試してみてください。でも!!!これはローカルデバッグ用です。現時点での本番作業(つまり、MSOpenTechコードが満足できるまで)には、Linuxサーバーを使用してredisをホストすることをお勧めします。UbuntuServerはうまく機能します。