json データのリストを redis に保存し、ServiceStack c# クライアントを使用してアクセスしています。私は基本的に自分の外部キーを管理しています。ここではzrange
、ID を保存し、アプリケーション内部のインターフェイスを使用して ID をzrange
取得し、Redis から基になる json オブジェクトを取得し、それらをリストとしてパッケージ化して他の部分に戻します。私のアプリケーションの。
PooledRedisClientManager
コードを実行しているサーバーとは別のサーバーでRedisがホストされると予想されるため、を使用しています。
MSOpenTech Redis サーバーを使用して、すべての開発作業を Windows 8 でローカルに行っています。現在、私の最大の課題は、クライアント接続が閉じられていないことです。
IRedisClientManager
Redis パーシスタに(IoC is 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);
どんな助けでも大歓迎です。