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.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage