PooledRedisClientManager gibt keine Verbindungen frei
Ich speichere Listen mit json-Daten in redis und greife über den ServiceStack c # -Client darauf zu. Ich verwalte im Wesentlichen meine eigenen Fremdschlüssel, in denen ich einzrange
von IDs und ich benutze eine interne Schnittstelle zu meiner Anwendung, um die IDs von der zu ziehenzrange
Rufen Sie dann die zugrunde liegenden JSON-Objekte von Redis ab und verpacken Sie sie als Liste, um zu anderen Teilen meiner Anwendung zurückzukehren.
Ich benutze diePooledRedisClientManager
Ich gehe davon aus, dass Redis auf einem anderen Server als dem Server gehostet wird, auf dem der Code ausgeführt wird.
Ich führe meine gesamte Entwicklungsarbeit lokal unter Windows 8 mithilfe des MSOpenTech Redis-Servers aus. Derzeit ist meine größte Herausforderung, dass Client-Verbindungen nicht geschlossen werden.
Meinem Redis-Persister wird eine Instanz von injiziertIRedisClientManager
(IoC ist CastleWindsor). Dieser Code wird im Kontext einer Azure Worker-Rolle ausgeführt.
So rufe ich Objekte aus einem Bereich ab:
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)
};
}
}
}
}
Dies ist der Code, mit dem ich den registriereIRedisClientManager
var mgr = new PooledRedisClientManager(100, 10, "localhost:6379");
container.Register(Component.For<IRedisClientsManager>().Instance(mgr).LifeStyle.Singleton);
Jede Hilfe wäre sehr dankbar.