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

Mir*_*pov 3 .net c# 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 @@!!@!@!
Run Code Online (Sandbox Code Playgroud)

不同的是最后一个字符"9"vs"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
Run Code Online (Sandbox Code Playgroud)

崩溃点 StackExchange.Redis

在此输入图像描述

...

我在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";
Run Code Online (Sandbox Code Playgroud)

...

KeyExists, StringIncrement,StringSet与主要=我的GUID工作.

Mar*_*ell 5

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

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

只是意味着您先前已将数据存储在非"set"类型的键中.尝试(在redis-cli中):

TYPE "02639d71-0935-35e8-9d1b-9dd1a2a34627"
Run Code Online (Sandbox Code Playgroud)

它将告诉您现有数据的数据类型.只有SADD在密钥不存在或密钥存在且是集合时才能使用.

  • @Miroslav"谁写了这些错误信息?" 该错误是从服务器逐字逐句,所以可能是Salvatore Sanfilippo :) (2认同)