16

C#/ASP.NET 4 アプリケーションで Booksleeve ライブラリを使用しています。現在、RedisConnection オブジェクトは、MonoLink クラス全体の静的オブジェクトです。この接続を開いたままにしておく必要がありますか、それとも各クエリ/トランザクションの後に開いたり閉じたりする必要がありますか (現在行っているように)。ちょっとだけ混乱。今のところ、私がそれをどのように使用しているかは次のとおりです。

public static MonoLink CreateMonolink(string URL)
{
    redis.Open();
    var transaction = redis.CreateTransaction();

    string Key = null;

    try
    {
        var IncrementTask = transaction.Strings.Increment(0, "nextmonolink");
        if (!IncrementTask.Wait(5000))
        {
            transaction.Discard();
            throw new System.TimeoutException("Monolink index increment timed out.");
        }

        // Increment complete
        Key = string.Format("monolink:{0}", IncrementTask.Result);

        var AddLinkTask = transaction.Strings.Set(0, Key, URL);
        if (!AddLinkTask.Wait(5000))
        {
            transaction.Discard();
            throw new System.TimeoutException("Add monolink creation timed out.");
        }

        // Run the transaction
        var ExecTransaction = transaction.Execute();
        if (!ExecTransaction.Wait(5000))
        {
            throw new System.TimeoutException("Add monolink transaction timed out.");
        }
    }
    catch (Exception ex)
    {
        transaction.Discard();
        throw ex;
    }
    finally
    {
        redis.Close(false);
    }

    // Link has been added to redis
    MonoLink ml = new MonoLink();
    ml.Key = Key;
    ml.URL = URL;

    return ml;
}

回答/洞察をお寄せいただきありがとうございます。また、このライブラリの公式ドキュメントはありますか? ありがとうございます^_^。

4

3 に答える 3

25

Booksleeveの著者によると

接続はスレッドセーフであり、大量に共有されることを意図しています。操作ごとに接続を行わないでください。

于 2011-12-06T08:52:36.897 に答える
8

この接続を開いたままにしておく必要がありますか、それとも各クエリ/トランザクションの後に開いたり閉じたりする必要がありますか (現在行っているように)。

クエリ/トランザクションを作成するたびに新しい接続を開く場合、おそらく少しのオーバーヘッドがあり、redis は高レベルの同時接続クライアント向けに設計されていますが、その数が数万程度になるとパフォーマンスの問題が発生する可能性があります。私が知る限り、接続プーリングはクライアント ライブラリで行う必要があるため (redis 自体にはこの機能がないため)、booksleeve がこの機能をサポートしているかどうかを確認する必要があります。それ以外の場合は、アプリケーションの起動時に接続を開き、存続期間中は開いたままにする必要があります (何らかの理由で並列クライアントを redis に接続する必要がない場合)。

また、このライブラリの公式ドキュメントはありますか?

それを使用する方法に関して私が見つけることができた唯一のドキュメントは、そのソース コードのtests フォルダーでした。

于 2011-09-25T09:42:53.610 に答える
4

参考までに(@bzlmの回答を続ける)、BookSleeveを使用して常に同じRedis接続を提供するシングルトンを作成しました(閉じている場合は作成中です。そうでない場合は、既存の接続が提供されています)。

これを見てください: https://stackoverflow.com/a/8777999/290343

あなたはそれを次のように消費します:

RedisConnection connection = Redis.RedisConnectionGateway.Current.GetConnection();
于 2012-02-07T05:29:04.917 に答える