2016-07-04 3 views
1

私のクラスで私のredisclientにservicestackを使用しています。 私は、次のようにクライアントRedisの1を持っている:Servicestack RedisClientが処分された後に接続されています

public class MySuperClass{ 
    ....   
    RedisClient client = new RedisClient("localhost", 6379);  
    public int MySuperProperty{get; set:} 
    .... 
} 

そして次は、私がそれを使用した後に、それが適切に配置されていることを確認するためにそれを使用する方法である:

private void GetInfoFromRedis(object sender, EventArgs e) { 
    using (client) { 
     client.Set<Human>("RedisKey", new Human { 
      Age = 29, 
      Height = 170, 
      Name = "HumanName" 
      }); 
     } 
    } 

私の質問は、私の後にありますdispose client別の接続要求をclientに設定して再送信を要求すると、クライアントはredisデータベースへの接続を正常に終了しますが、今回は接続がCLIENT LISTにとどまります。

答えて

2

例えば、IOCにあなたを登録好ましくは1、あなたはシングルトンとしてRedisのClientManagerを使用しなければならない。すなわち、ServiceStack Redisのクライアントを使用しての正しい使用方法についてはServiceStack.Redis documentationを参照してください。

container.Register<IRedisClientsManager>(c => 
    new RedisManagerPool("localhost:6379")); 

続いていそれはあなたのクラス、例えばに注入:

public class MySuperClass 
{ 
    public IRedisClientsManager RedisManager { get; set; } 
} 

次にあなたが例えば、使用中にRedisのClientMangerからクライアントを解決できます。

private void GetInfoFromRedis(object sender, EventArgs e) 
{ 
    using (var client = RedisManager.GetClient()) 
    { 
     client.Set<Human>("RedisKey", new Human { 
      Age = 29, 
      Height = 170, 
      Name = "HumanName" 
      }); 
     } 
    } 
} 

あなたがIOCを使用しない場合は、例えば、静的プロパティでIRedisClientsManagerを移入することができます

public class MySuperClass 
{ 
    public static IRedisClientsManager RedisManager = 
     new RedisManagerPool("localhost:6379"); 
} 

しかし重要なことはIRedisClientsManagerからRedisのクライアントを解決して、直後にそれを処分することです使用、例えばa usingステートメント:

using (var redis = RedisManager.GetClient()) { ... } 
+0

ServiceStackプロジェクトのリードからの回答は素晴らしいです!あなたの迅速な答えをありがとう!私はすでにRedisclientsをプールするために私のプロジェクトでPooledRedisClientManagerを使用しています。私は、私が説明したように使い方が不思議でした。私の使った方法のように使うのは悪い習慣と考えられますか?私は既に処分されたクライアントを再利用することができますか?唯一推奨されるのは、クライアントへのプールされたアクセスです。事前に感謝し、あなたの時間に感謝 –

+0

あなたはそれを処分した後に同じインスタンスを再利用しているからです。あなたはそれをプールから取り出し、完了後にそれを返す必要があります。あなたがそれを処分した後に再利用しようとしないでください。 – mythz

関連する問題