2014-06-09 2 views
3

Очень раздражающий сбой с StackExchange.RedisSetAdd(key, val).StackExchange.Redis SetAdd (ключ, val) сбой с ключом = GUID

Я хочу установить набор с помощью 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 @@[email protected][email protected]! 

Разница является последним символом "9" против "7"

Безразлично» t 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"; 

...

KeyExists, StringIncrement, StringSet хорошо работать с ключом = мой GUID.

ответ

5

Кнопки Redis непрозрачны. Это сообщение:

WRONGTYPE Операция против ключ держит неправильный вид значения

просто означает, что вы ранее сохраненные данные в этом ключе типа, который не является «установить». Попробуйте (в redis-cli):

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

, который сообщит вам тип данных существующих данных. Вы можете использовать только SADD, если либо ключ не существует, либо он существует и представляет собой набор.

+1

OMG. Он сбой, потому что раньше я сохранил строку с этим ключом. Кто пишет эти сообщения об ошибках? Почему сообщение не «БД уже содержит другой элемент с этим ключом. Используйте другой ключ!» .. Большое спасибо. +1 –

+2

@ Мирослав, который пишет эти сообщения об ошибках? эта ошибка является дословной с сервера, поэтому, вероятно, Salvatore Sanfilippo :) –

+1

Я это знаю. :) Я программирую с 1986 года, но я был введен в заблуждение этим исключением (имея 3-дневный опыт работы с Redis). Я искал, что не так с типом ключа с точки зрения «StackExchange.Redis». Бедный мне :) –