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
...
我在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";
...
KeyExists
,StringIncrement
,StringSet
可以正常使用key = my GUID。
答案 0 :(得分:5)
Redis键是不透明的。那条消息:
WRONGTYPE对持有错误值的键的操作
只是意味着您之前已将数据存储在不是&#34;设置&#34;的类型的键中。尝试(在redis-cli中):
TYPE "02639d71-0935-35e8-9d1b-9dd1a2a34627"
将告诉您现有数据的数据类型。如果密钥不存在,或者密钥存在且是一组,则只能使用SADD
。