PooledRedisClientManager не освобождает соединения
Я храню списки данных JSON в Redis и доступ к ним с помощью клиента ServiceStack C #. По сути, я управляю своими собственными внешними ключами, где хранюzrange
идентификаторов, и я использую внутренний интерфейс для моего приложения, чтобы вытащить идентификаторы изzrange
а затем извлеките базовые объекты json из Redis и упакуйте их в виде списка для возврата в другие части моего приложения.
Я используюPooledRedisClientManager
как я ожидаю, Redis будет размещен на сервере, отличном от сервера, выполняющего код.
Я делаю всю свою работу по разработке локально на Windows 8, используя сервер MSOpenTech Redis. В настоящее время моя самая большая проблема заключается в том, что клиентские соединения не закрываются.
Мой Redis Persister вводится с экземпляромIRedisClientManager
(IoC - это CastleWindsor). Этот код выполняется в контексте рабочей роли Azure.
Вот как я выбираю предметы из 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
var mgr = new PooledRedisClientManager(100, 10, "localhost:6379");
container.Register(Component.For<IRedisClientsManager>().Instance(mgr).LifeStyle.Singleton);
Любая помощь будет принята с благодарностью.