Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 当哈希键为GUID时,StackExchange.Redis HGET/HGETASYNC返回null_C#_.net_Redis_.net 4.5_Stackexchange.redis - Fatal编程技术网

C# 当哈希键为GUID时,StackExchange.Redis HGET/HGETASYNC返回null

C# 当哈希键为GUID时,StackExchange.Redis HGET/HGETASYNC返回null,c#,.net,redis,.net-4.5,stackexchange.redis,C#,.net,Redis,.net 4.5,Stackexchange.redis,我遇到了一些问题,我相信这可能是StackExchange.Redis库中的一个错误 当我创建一个以键为GUID的散列时,.HashGet或HashGetAsync都将返回一个null值,而当我尝试使用redis cli获取相同的散列键时,我能够成功地检索散列值。从您的注释中,这里的GUID似乎是散列字段的子键。从根本上说,它运转良好;见: static void Main() { int i = new Random().Next(); Console.WriteLine("&

我遇到了一些问题,我相信这可能是StackExchange.Redis库中的一个错误


当我创建一个以键为GUID的散列时,
.HashGet
HashGetAsync
都将返回一个
null
值,而当我尝试使用
redis cli
获取相同的散列键时,我能够成功地检索散列值。

从您的注释中,这里的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);
    }
}
实际输出:

33221100-5544-7766-8899-AABBCCDDEEFF

请注意,第一组、第二组和第三组是相反的。如果这是问题所在,那就怪我!然而,我强烈怀疑前两种可能性更大。要进行调查,最好在比较两个不同系统的工作时,以
monitor
模式运行
redis cli

您有确切的代码示例吗?没有从
Guid
RedisKey
的隐式转换,所以我很好奇这是通过
字符串还是通过
字节[]
,以及这两种方式中的哪一种:你到底是如何做的。我还想知道您是否可以在一个单独的redis cli实例上运行
MONITOR
,以查看这两种方法的问题。@marcGravel它的字符串。我将直接尝试使用
重新键
,看看会发生什么我的第一个猜测是:格式化;大小写、间距、连字符、,etc@MarcGravell使用Guid.ToString或Guid.ToByteArray的Uhm将导致null。代码是这样的:
db.HashGetAsync(string.Format(“whatever:licensing:products:{0}:features:{1}:all”,productId,featureId),id.ToByteArray())
@marcGravel实际上我正在复制粘贴键“quick watching”
string.format
redis cli
的结果,这样我就可以得到哈希值。我将把所有内容放在一起,检查您是否建议可以解决此问题!!提前感谢您的努力!我到处都在做
Guid.ToString()
。顺便说一句,我认为实际上问题更多地与
重新键有关,而不是与某个散列中的子键有关。我试着做了
监视器
的事情,它输出了正确的命令。毕竟,如果我将粘贴命令复制到
redis cli
并执行它,我就可以检索数据!!!图书馆里似乎发生了一些奇怪的事情,我错了吗?天哪!!!!!!!!!!!!你知道什么是#@3!!!问题在具体的方法中,我没有选择正确的Redis DB!!当我运行测试时,我选择了
db 1
而不是
0
,并且创建键的方法正确地指向
1
,而检索键的方法指向
0
!!!!!!!!啊。。。嗯,谢谢你的努力…@Matíasfidemrazer-hah!很公平——“错误的数据库”并没有立即出现在我的脑海中,但显示了可重复样本的重要性;P
33221100-5544-7766-8899-AABBCCDDEEFF