我存储JSON数据的列表中的Redis和使用ServiceStack C#客户端访问它。 我基本上是管理自己的外键,我在那里存放zrange
的id和我使用内部的接口,以我的应用程序从拉动ID的zrange
,然后从Redis的获取底层JSON对象并将其打包作为一个列表返回我的应用程序的其他部分。
我现在用的是PooledRedisClientManager
我预期的Redis从执行代码的服务器不同的服务器上托管。
我在本地做在Windows 8上我所有的开发工作,使用Redis的MSOpenTech服务器。 目前我最大的挑战是,客户端连接不被关闭。
我Redis的留存被注入了一个实例IRedisClientManager
(国际奥委会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
var mgr = new PooledRedisClientManager(100, 10, "localhost:6379");
container.Register(Component.For<IRedisClientsManager>().Instance(mgr).LifeStyle.Singleton);
任何帮助将不胜感激。