[REDIS] PooledRedisClientManager는 연결을 해제하지
REDISPooledRedisClientManager는 연결을 해제하지
나는 레디 스에서 JSON 데이터의 목록을 저장하고 ServiceStack의 C #을 클라이언트를 사용하여 접근하고있다. 나는 기본적으로 내가 ID의 zrange를 저장하는 내 자신의 외래 키를 관리하고 있는데이 ID 년대 zrange에서 당겨 후 레디 스에서 기본 JSON 객체를 가져오고 돌아갑니다리스트로 패키지 내 응용 프로그램 내부 인터페이스를 사용 내 응용 프로그램의 다른 부분.
나는 레디 스 코드를 실행하는 서버에서 다른 서버에서 호스팅하는 기대로 나는 PooledRedisClientManager을 사용하고 있습니다.
나는 MSOpenTech 레디 스 서버를 사용하여, 윈도우 8에서 로컬 내 모든 개발 작업을하고있는 중이 야. 현재 내 가장 큰 도전은 클라이언트 연결이 종료되지 않는 것입니다.
내 레디 스 persister IRedisClientManager 인스턴스 IOC (CastleWindsor가있다)에 주입되고있다. 이 코드는 푸른 작업자 역할의 컨텍스트에서 실행됩니다.
이것은 내가 zrange에서 항목을 가져 오는 오전하는 방법입니다 :
public class MyRedisPersister<T> : IResourcePersister<T>
{
IRedisClientManager _mgr;
public MyRedisPersister(IRedisClientManager mgr)
{
_mgr = mgr;
}
public IResourceList<T> Get<T>(string key, int offset, int count) where T
{
using (var redis = _clientManager.GetClient())
{
var itemKeys = redis.GetRangeFromSortedSet(key, offset, offset + count - 1).ToList();
var totalItems = redis.GetSortedSetCount(key);
if (itemKeys.Count == 0)
{
return new ResourceList<T>
{
Items = new List<T>(),
Offset = 0,
PageSize = 0,
TotalItems = 0,
TotalPages = 0
};
}
else
{
return new ResourceList<T>
{
Items = itemKeys.Select(k => redis.Get<T>(k)).ToList(),
Offset = offset,
PageSize = count,
TotalItems = totalItems,
TotalPages = (int) Math.Ceiling((float) totalItems/count)
};
}
}
}
}
이것은 IRedisClientManager를 등록하는 코드 I의 사용이다
var mgr = new PooledRedisClientManager(100, 10, "localhost:6379");
container.Register(Component.For<IRedisClientsManager>().Instance(mgr).LifeStyle.Singleton);
어떤 도움을 크게 감상 할 수있다.
해결법
-
==============================
1.현재 내 가장 큰 도전은 클라이언트 연결이 종료되지 않는 것입니다.
현재 내 가장 큰 도전은 클라이언트 연결이 종료되지 않는 것입니다.
나의 이해는 클라이언트 연결 그냥 재사용을 위해 수영장에 넣어 닫을 수 없습니다해야한다는 것입니다, 그래서 당신은 'PooledRedisClientManager'를 사용하고 있습니다. 풀 크기가 100 개 연결 것 같습니다.
당신은 사용해 볼 수 있습니다 var에 MGR = 새로운 BasicRedisClientManager ( "로컬 호스트 : 6379") 이는 클라이언트 폐기해야한다.
-
==============================
2.편집하려면이 방법 아래 권장하지 않습니다 - 당신이 IRedisClientsManager에 대한 종속성을하고 사용 () 블록 내부의 모든 레디 스 클라이언트 호출을 포장해야한다, 그렇지 않으면 당신은 그렘린 물린됩니다.
편집하려면이 방법 아래 권장하지 않습니다 - 당신이 IRedisClientsManager에 대한 종속성을하고 사용 () 블록 내부의 모든 레디 스 클라이언트 호출을 포장해야한다, 그렇지 않으면 당신은 그렘린 물린됩니다.
나는 비슷한 문제가이 일 듯 결국, PooledRedisClientsManager 멋지게 연주 윈저을 얻는을 꾸게 :
container.Register( Component.For<IRedisClientsManager>() .Instance(redisClients) .LifestyleSingleton(), Component.For<IRedisClient>() .UsingFactoryMethod(c => c.Resolve<IRedisClientsManager>().GetClient(), managedExternally: true)); }
managedExternally 매개 변수는 IRedisClients에 우려를 해체 적용하고 PooledRedisClientsManager 핸들 재활용을하게하려고하지 윈저을 알려줍니다.
from https://stackoverflow.com/questions/14856975/pooledredisclientmanager-not-releasing-connections by cc-by-sa and MIT license
'REDIS' 카테고리의 다른 글
[REDIS] 2 레디 스 온라인 사용자를 추적하기위한 접근한다. 어느 것이 더 빠르다? (0) | 2020.01.15 |
---|---|
[REDIS] 어떻게 레디 스 서버의 CPU 사용량을 개선하기 위해? (0) | 2020.01.15 |
[REDIS] 클라이언트가 즉석에서 생성되는 매우 큰 파일을 다운로드하게하는 방법 (0) | 2020.01.15 |
[REDIS] 캐싱 JSON은 서버 측에서 객체 (0) | 2020.01.15 |
[REDIS] 레디 스 소트 세트의 부분 키 이름을 사용하여 값을 찾기 (0) | 2020.01.15 |