sql >> データベース >  >> NoSQL >> Redis

ServiceStack.Redisトランスポートを読み取れません-BasicRedisClientManager

    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があります。 プロパティとボイラープレートの上。




    1. 別々のnodeJSインスタンスでソケットを共有する

    2. 初心者向けのHadoopMapReduceチュートリアル

    3. MongoDB-ソケットのアクセスが拒否されました:/tmp/mongodb-27017.sock

    4. MongoDBビューをコレクションに変換する方法