我遇到了一些问题,我相信它可能是 StackExchange.Redis 库中的错误。
当我创建密钥为GUID的哈希时,.HashGet
或HashGetAsync
都会返回null
值,而当我尝试使用{{1}获取相同的哈希密钥时我能够成功检索哈希值。
答案 0 :(得分:1)
从你的评论中,这里的guid似乎是哈希字段子键。从根本上说,它运作良好;见:
static void Main()
{
int i = new Random().Next();
Console.WriteLine("> {0}", i);
Guid guid = Guid.NewGuid();
using (var muxer = ConnectionMultiplexer.Connect("127.0.0.1:6379"))
{
var db = muxer.GetDatabase();
db.KeyDelete("foo");
db.HashSet("foo", guid.ToByteArray(), i);
}
using (var muxer = ConnectionMultiplexer.Connect("127.0.0.1:6379"))
{
var db = muxer.GetDatabase();
var val = (int)db.HashGet("foo", guid.ToByteArray());
Console.WriteLine("< {0}", val);
}
}
应该显示相同的随机生成的数字两次(一次设置它,一次获取它)。
我只能假设这是一种期望的失败;例如:
Guid.ToByteArray()
,不输出人们通常期望的内容。你可以在这里看到最后一个场景:
Guid guid = new Guid("00112233-4455-6677-8899-AABBCCDDEEFF");
var arr = guid.ToByteArray();
for(int i = 0 ; i < arr.Length; i++)
{
if (i == 4 || i == 6 || i == 8 || i == 10) Console.Write('-');
Console.Write(arr[i].ToString("X2"));
}
Console.WriteLine();
实际输出:
33221100-5544-7766-8899-AABBCCDDEEFF
请注意,第一组,第二组和第三组是相反的。如果这个是问题,那么责备ToByteArray()
!但是,我强烈怀疑前两个更有可能。要进行调查,最好的办法是在redis-cli
模式下运行monitor
,同时比较两个不同系统正在做的事情。