我正在使用ServiceStack c#客户端将json数据列表存储在Redis中,并进行访问。我本质上是在管理自己的外键,其中我存储了一个id的
我使用
我在Windows 8上本地进行所有开发工作,使用MSOpenTech Redis服务器。目前我最大的挑战是客户端连接没有被关闭。
我的Redis持久化器被注入了一个
以下是我从zrange中获取项目的方法:
zrange
,并使用我的应用程序内部接口从zrange
中提取id,然后从Redis中获取底层的json对象并将它们打包成一个列表返回给我的应用程序的其他部分。我使用
PooledRedisClientManager
,因为我预计Redis将托管在与执行代码的服务器不同的服务器上。我在Windows 8上本地进行所有开发工作,使用MSOpenTech Redis服务器。目前我最大的挑战是客户端连接没有被关闭。
我的Redis持久化器被注入了一个
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);
非常感谢你的帮助。