매우 성가신 충돌이 StackExchange.Redis
SetAdd(key, val)
으로 발생합니다.StackExchange.Redis 키 = GUID로 SetAdd (키, 발) 충돌이 발생합니다
GUID 프로그램을 키로 설정하려고합니다.
나는 발견 다른 사람과 SetAdd(key, val)
일부 GUID와 작동하지만 충돌 것을 (디버깅 3시간 후) :
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 승 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의 이음새가 있습니다.
다른 GUID로 더 많은 테스트가 수행됩니다. '7'로 끝나는 것만 충돌합니다. 키 = 내 GUID 잘
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
작동합니다.
OMG. 이전에이 키가있는 문자열을 저장했기 때문에 충돌이 발생합니다. 누가이 오류 메시지를 씁니까? 왜 메시지가 "DB에 이미 그 키가있는 다른 요소가 있습니다. 다른 키를 사용하십시오!".. 고맙습니다. +1 –
@Miroslav "누가이 오류 메시지를 씁니까?" 그 오류는 서버에서 축 어적입니다, 아마도 Salvatore Sanfilippo :) –
나는 그것을 안다. :) 저는 1986 년 이래로 프로그래밍 중이지만,이 예외 (Redis에서 3 일간의 경험이 있음)로 잘못 인도되었습니다. 나는 StackExchange.Redis 관점에서 키의 타입에 문제가 있는지를 조사했다. 가난한 날 :) –