1

クラスの redisclient に servicestack を使用しています。次のようなredisクライアントが1つあります。

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"
            });
        }
    }

私の質問はclient、同じ Disposed を使用して redis に別のリクエストを行うと破棄した後、破棄clientされたクライアントは redis データベースへの別の接続を成功させますが、今回は接続が CLIENT LIST に残ります。

4

1 に答える 1

3

ServiceStack Redis Client の正しい使用方法については、 ServiceStack.Redis のドキュメントを参照してください。つまり、Redis ClientManager をシングルトンとして、できれば IOC に登録したものとして使用する必要があります。

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");
}

しかし、重要なことは、redis クライアントを から解決し、IRedisClientsManagerすぐに使用した後、たとえば using ステートメント内で破棄することです。

using (var redis = RedisManager.GetClient()) { ... }
于 2016-07-04T03:40:44.707 に答える