StackExchange.Redis SetAdd(key,val)崩溃,键= GUID

时间:2014-06-09 16:03:01

标签: c# .net redis stackexchange.redis

StackExchange.Redis SetAdd(key, val)非常恼人的崩溃。

我想设置一个以程序GUID为键的集合。

我发现(经过3个小时的调试)SetAdd(key, val)与某些GUID一起使用,但与其他人崩溃:

        string key = "02639d71-0935-35e8-9d1b-9dd1a2a34629";
        const string val = "somevalue";

        db.SetAdd(key, val); // <=== Works

        key = "02639d71-0935-35e8-9d1b-9dd1a2a34627";
        db.SetAdd(key, val); // <=== CRASH @@!!@!@!

区别在于最后一个字符“9”与“7”

SetAdd不能将本地GUID用作密钥吗?

环境:C#.NET 4 Win 8.1 VS2013

崩溃讯息:

An unhandled exception of type 'StackExchange.Redis.RedisServerException' occurred in StackExchange.Redis.dll
Additional information: WRONGTYPE Operation against a key holding the wrong kind of value

StackExchange.Redis

中的崩溃点

enter image description here

...

我在LINQPad中测试了这段代码。它在同一个地方崩溃了。第一个GUID有效,第二个没有。

它认为崩溃不是由于这是启动应用程序GUID。

使用不同的GUID进行更多测试。只有以'7'结尾的那个崩溃。

    key = "02639d71-0935-35e8-9d1b-9dd1a2a34622";
    key = "02639d71-0935-35e8-9d1b-9dd1a2a34623";
    key = "02639d71-0935-35e8-9d1b-9dd1a2a34624";
    key = "02639d71-0935-35e8-9d1b-9dd1a2a34625";
    key = "02639d71-0935-35e8-9d1b-9dd1a2a34626";
    key = "02639d71-0935-35e8-9d1b-9dd1a2a34627"; // <= crashes
    key = "02639d71-0935-35e8-9d1b-9dd1a2a34628";
    key = "02639d71-0935-35e8-9d1b-9dd1a2a34629";

...

KeyExistsStringIncrementStringSet可以正常使用key = my GUID。

1 个答案:

答案 0 :(得分:5)

Redis键是不透明的。那条消息:

  

WRONGTYPE对持有错误值的键的操作

只是意味着您之前已将数据存储在不是&#34;设置&#34;的类型的键中。尝试(在redis-cli中):

TYPE "02639d71-0935-35e8-9d1b-9dd1a2a34627"

将告诉您现有数据的数据类型。如果密钥不存在,或者密钥存在且是一组,则只能使用SADD