[REDIS] StackExchange TimeoutException는 레디 스에서 2 개 세트에 750 개 항목을 삽입 할 때
REDISStackExchange TimeoutException는 레디 스에서 2 개 세트에 750 개 항목을 삽입 할 때
처음에 나는 (... 어쩌면이 모든 좋은 아이디어가 아니라) 2 개 레디 스 세트로 항목 중 일부 수집을 삽입하기 위해 노력하고있어. 나는 한 번에 추가하는 것을 시도하고 있다는 항목의 금액 : 750
StackExchange.redis 클라이언트를 사용하여이 작업을 수행 할 때 지금 내가 할 시간 제한 예외가 발생, 내가 사용 완료 유사한 행동을 할 수있어 그 흥미로운 점은 "기존"booksleeve 클라이언트는 내가 이전에 조사했습니다.
그래서, (심지어 어쩌면 내 intial bookSleeve 구현에) 뭔가 확실히 잘못, 그냥 정확히 무엇이 잘못되었는지 알아 내려고. 아래는 내가 레디 스 클라이언트를 사용하는 것이 코드의 샘플입니다 : BookSleeve :
using (var tran = connection.CreateTransaction())
{
Task lastOpTask = null;
tran.SuspendFlush();
try
{
// perform required configurations/ actions
tran.Sets.Add(_redisConfiguration.DbNumber, CurrentIdsSetDbKey, stringIds);
tran.Sets.Add(_redisConfiguration.DbNumber, CurrentDetailsSetDbKey, stringDetails);
lastOpTask = tran.Execute();
isOperationSuccessful = true;
}
catch (TaskCanceledException ex)
{
...
}
catch (TimeoutException ex1)
{
...
}
finally
{
tran.ResumeFlush();
}
if (lastOpTask != null)
{
connection.Wait(lastOpTask);
...
}
}
동일한 코드의 StackExchange.redis 구현 :
var tran = db.CreateTransaction();
// todo: do we need to add here any condition or PipeLining? any watch/unwatch verifications?
tran.SetAddAsync(CurrentIdsSetDbKey, stringIds);
tran.SetAddAsync(CurrentDetailsSetDbKey, stringDetails);
try
{
isOperationSuccessful = tran.Execute();
}
catch (TaskCanceledException ex)
{
...
}
catch (TimeoutException ex1)
{
...
}
내가 단위 테스트를 시작한 후 나는 StackExchange 클라이언트에 대한 다음 오류가 발생합니다 :
메시지 : 제한 시간 이달, EXEC 수행 : 3, 큐 3 숨어 0 = QS = 3, QC = 0, WR = 0 / 0
출처 : C에서 StackExchange.Redis.ConnectionMultiplexer.ExecuteSyncImpl [T] (메시지 메시지 ResultProcessor1 프로세서 ServerEndPoint 서버)에서 : \ 인 TeamCity \ buildAgent \ 작업 \ 18a91a3757cef937 \ StackExchange.Redis \ StackExchange \ 레디 스 \ ConnectionMultiplexer.cs : 1,693 라인 \ 인 TeamCity \ buildAgent \ 작업 \ 18a91a3757cef937 \ StackExchange.Redis \ StackExchange \ 레디 스 \ RedisBase.cs : 라인 92의 C StackExchange.Redis.RedisBase.ExecuteSync [T] (메시지 메시지 ResultProcessor1 프로세서 ServerEndPoint 서버)에서 StackExchange.Redis.RedisTransaction.Execute (CommandFlags 플래그) C에서의 : \ 인 TeamCity \ buildAgent \ 작업 \ 18a91a3757cef937 \ StackExchange.Redis \ StackExchange \ 레디 스 \ RedisTransaction.cs : 라인 (51) \ 프로젝트 \ DFS \ 코드 \ DFS \ DFS.Cache.CacheManager.RedisStackExchange \ RedisContestCacheManager.cs : D에 DFS.Cache.CacheManager.RedisStackExchange.RedisContestCacheManager.RegisterAvailableContests (IList1 대회)에서 라인 (131)
그냥 정확히 내가 잘못을 뭘하는지 궁금해. 어떤 제안에 대해 미리 감사합니다!
추신 stackEchange.redis 구성을 위해 나는 GitHub의에서 마크에서 제공하는 설정 샘플 사용하고 (여기에서 사용할 수를 : StackExchange / StackExchange.Redis / 방울 / 마스터 / 문서 / Configuration.md)
추신 현재 StackExchange 클라이언트 구성 파일을 참조하십시오 :
var config = new ConfigurationOptions
{
EndPoints =
{
{"MasterIP", 6379},
{"SlaveIP", 6380}
},
CommandMap = CommandMap.Create(new HashSet<string>
{
// EXCLUDE a few commands (to work with data-flow-related mode only)
"INFO",
"CONFIG",
"CLUSTER",
"PING",
"ECHO",
"CLIENT"
}, available: false),
KeepAlive = 60, // 60 sec to ensure connection is alive
ConnectTimeout = 5000, // 5 sec
SyncTimeout = 5000, // 5 sec
ServiceName = "mymaster", // sentinel service name
DefaultVersion = new Version(2, 8, 8),
Password = "password"
};
(세트에 사용되는) 표준 항목은 다음과 같습니다
{
"Id":"08e5ffdbced046cb8f55c50e4bab822d",
"Entries":0,
"State":"i",
"Name":"very dummy entry name value: autoGet 299",
"Summary": "entry summary details, some long string 299, some common info, some data: true, 8200"
"IsMultiple":true,
"IsPublic":true,
"MaxEntries":8200,
"IsEntryVisible":true,
"StartDate":"9/10/2014 12:00:00 AM"
}
추신 마크의 반응 후에 나는 시험의 몇 가지를 실행 및 단위 테스트에서 다른 오류를 가지고 예를 들면
{"Timeout performing SISMEMBER set:raw:Ids, inst: 1, queue: 6, qu=0, qs=6, qc=0, wr=0/0"} when set contains not more than 300 items.
그래서 나는이 연결 문제와 StackExchange.redis 클라이언트에 현재의 스위치와는 아무 상관이 없다는 것을 동의합니다.
해결법
-
==============================
1.다음은 잘 전달, 보고서는 로컬 10MS. 나는이 문제를 재현 대표적인 테스트를 할 수 있도록 빈칸을 조금 채울 수 있다면 나는 매우 관심이있을 것입니다. 참고 한때 0, QS = 3하는 시점에서 시간 초과, 우리가 응답 할 레디 스 서버 기다리고 있다는 것을 알려줍니다 = 것을. 물론 지역 대역폭과 지연 관심이 될 것이지만, 근본적으로, 그것을 작동합니다. 또한 동기화 - 제한 시간이 설정되어 무엇에 관심이있을 것입니다.
다음은 잘 전달, 보고서는 로컬 10MS. 나는이 문제를 재현 대표적인 테스트를 할 수 있도록 빈칸을 조금 채울 수 있다면 나는 매우 관심이있을 것입니다. 참고 한때 0, QS = 3하는 시점에서 시간 초과, 우리가 응답 할 레디 스 서버 기다리고 있다는 것을 알려줍니다 = 것을. 물론 지역 대역폭과 지연 관심이 될 것이지만, 근본적으로, 그것을 작동합니다. 또한 동기화 - 제한 시간이 설정되어 무엇에 관심이있을 것입니다.
using System.Diagnostics; using System.Linq; using NUnit.Framework; namespace StackExchange.Redis.Tests.Issues { [TestFixture] public class SO22786599 : TestBase { [Test] public void Execute() { string CurrentIdsSetDbKey = Me() + ".x"; string CurrentDetailsSetDbKey = Me() + ".y"; RedisValue[] stringIds = Enumerable.Range(1, 750).Select(i => (RedisValue)(i + " id")).ToArray(); RedisValue[] stringDetails = Enumerable.Range(1, 750).Select(i => (RedisValue)(i + " detail")).ToArray(); using (var conn = Create()) { var db = conn.GetDatabase(); var tran = db.CreateTransaction(); tran.SetAddAsync(CurrentIdsSetDbKey, stringIds); tran.SetAddAsync(CurrentDetailsSetDbKey, stringDetails); var watch = Stopwatch.StartNew(); var isOperationSuccessful = tran.Execute(); watch.Stop(); System.Console.WriteLine("{0}ms", watch.ElapsedMilliseconds); Assert.IsTrue(isOperationSuccessful); } } } }
from https://stackoverflow.com/questions/22786599/stackexchange-timeoutexception-when-trying-to-insert-750-items-in-2-sets-in-redi by cc-by-sa and MIT license
'REDIS' 카테고리의 다른 글
[REDIS] 스프링 데이터 레디 스 마스터 슬레이브 구성 (0) | 2020.01.24 |
---|---|
[REDIS] 레디 스와 Node.js를 : 동기 또는 비동기? (0) | 2020.01.24 |
[REDIS] PHP + 레디 스 + 펍에서 실시간 채팅 / 하위 + WebSocket을 (+ NodeJS) (0) | 2020.01.24 |
[REDIS] 레디 스 해시 매김 (0) | 2020.01.24 |
[REDIS] 여부 LettuceConnectionFactory는 레디 스 스프링 부팅 버전 제한이? (0) | 2020.01.24 |