0

Windows 2008 マシンで単一の Redis サーバーを実行しています。それぞれがこのインスタンスを使用する複数の Web サイトがありBasicRedisClientManager.、アプリの起動時に一度セットアップされ、Application[]ストアに設定されます。そうすれば、すべてのユーザーで再利用できます。私が抱えている問題は、1 つのサイトが専用サーバーで実行され、他のサイトが Redis サーバーが実行されている localhost で実行されていることです。1 つは本番用で、もう 1 つは新しい作業/デモンストレーション用のテスト場所です。リモート クライアントは正常に動作しますが、localhost クライアントはサーバーと通信せず、ロックされた状態または停止状態にあるように見えます。サイトを実行すると、スタック オーバーフローが発生し、サイト自体がリサイクルされます。以下は、私が持っているセットアップのサンプルコードです。クライアント間でのロックの作成に関する情報があるようですが、これが私が取るべきルートであるかどうかはわかりません。

http://www.servicestack.net/docs/redis-client/distributed-locking-with-redis

サンプルコード:

    protected override void Application_Start(object sender, EventArgs e)
    {
        /*
         * Create basicRedisClientManager for redis.
         */
        var redisHost = ConfigurationManager.AppSettings["RedisHostIp"].ToString();
        BasicRedisClientManager basicRedisClientManager = new BasicRedisClientManager(redisHost);
        Application["BasicRedisClientManager"] = basicRedisClientManager;

     .....
    }

次に、クラスコンストラクターで使用します

    public CacheManager()
    {
        if (Application["BasicRedisClientManager"] != null)
        {
            /*local variable*/
            basicRedisClientManager = (BasicRedisClientManager)Application["BasicRedisClientManager"];
        }
    }

マネージャーを使用してクラス内。

        if (basicRedisClientManager != null)
        {
            using (var redisClient = (RedisClient)basicRedisClientManager.GetClient())
            {
                if (!saveToInProcOnly && redisClient != null)
                {
                    using (var redis = redisClient.GetTypedClient<T>())
                    {
                        redis.SetEntry(key, value);
                    }
                }
            }
        }

このロジックは、すべてのサイトで同じです。

どんな洞察も大歓迎です!

4

1 に答える 1

1

わかりませんが、 BookSleeveクライアント ライブラリBasicRedisClientManagerを使用することをお勧めします。接続の再利用に関しては、答えは再利用しないことです。つまり、BookSleeve の著者が推奨しているように、接続が必要になるたびに接続を再作成してください。

防弾Redisクライアント接続を作成する方法については、この質問受け入れられた回答を参照してください。

于 2012-06-13T17:24:10.757 に答える