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工作.
Redis键是不透明的.那条消息:
WRONGTYPE对一个持有错误值的键的操作
只是意味着您先前已将数据存储在非"set"类型的键中.尝试(在redis-cli中):
TYPE "02639d71-0935-35e8-9d1b-9dd1a2a34627"
Run Code Online (Sandbox Code Playgroud)
它将告诉您现有数据的数据类型.只有SADD在密钥不存在或密钥存在且是集合时才能使用.