RedisClient
のシングルトンインスタンスを保持しないでください またはIRedisTypedClient<BarSet>
どちらもスレッドセーフではないRedisTCP接続をカプセル化します。代わりに、IRedisClientsManager
のシングルトンインスタンスを保持できます。 -これは、スレッドセーフなRedisクライアントファクトリ(DB接続プールなど)を提供することを目的としています。
ServiceStackサービスも使用している場合は、ServiceStackのIOCに依存関係を登録する方が簡単なので、IRedisClientsManager
他の依存関係と同じように挿入できます(例:AppHost.Configure()
) :
container.Register<IRedisClientsManager>(c =>
new BasicRedisClientManager("[email protected]:6379"));
これにより、base.Redis
を使用できるようになります ServiceStackサービスのRedisClientプロパティ(例:
public class JmaSetsService : Service
{
public object Get(JmaSets request)
{
var redisBarSets = base.Redis.As<BarSet>();
return redisBarSets.Lists[instument_key].GetAll();
}
}
base.Redis
を使用する場合 RedisClientはサービスによってすでに自動的に破棄されているため、明示的に破棄する必要はありません。つまり、
public class Service
{
...
public virtual void Dispose()
{
if (redis != null)
redis.Dispose();
...
}
}
IRedisClientsManager
を挿入することもできます パブリックプロパティまたはコンストラクタ引数を使用して、他の依存関係と同様に独自のクラスに変換します。例:
public class RedisBarSetData
{
public virtual IRedisClientsManager RedisManager { get; set; }
private IRedisClient redis;
public virtual IRedisClient Redis
{
get { return redis ?? (redis = RedisManager.GetClient()); }
}
public override void Dispose()
{
if (redis != null)
redis.Dispose();
}
public List<BarSet> getData(BarSets data)
{
setKeys(data); // instrument_key is set in here
return Redis.As<BarSet>().Lists[instrument_key].GetAll();
}
}
次に、ServiceStackのIOCに登録して自動配線できます。
container.RegisterAutoWired<RedisBarSetData>();
これにより、サービスの依存関係として使用できるようになります:
public class JmaSetsService : Service
{
public RedisBarSetData RedisBarSetData { get; set; }
public object Get(JmaSets request)
{
return RedisBarSetData.getData(new BarSets(request));
}
}
独自の基本クラスを作成する代わりに、既存のLogicBase基本クラスから継承することもできます。この基本クラスにはすでに
IRedisClientsManager
があります。 プロパティとボイラープレートの上。