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);
}
}
}
}
このロジックは、すべてのサイトで同じです。
どんな洞察も大歓迎です!