キャッシュをクエリする単一のマシンの負荷が高いシナリオで、Azure Redis Cache を使用しています。このマシンは、およそ 1 秒間に約 20 個のアイテムを取得および設定します。昼間は増えますが、夜は減ります。
これまでのところ、問題なく動作しています。今日、「接続されたクライアント」のメトリックが非常に高いことに気付きましたが、アイテムを常に取得および設定するクライアントは 1 つしかありません。ここに私が意味するメトリックのスクリーンショットがあります:
私のコードは次のようになります。
public class RedisCache<TValue> : ICache<TValue>
{
private IDatabase cache;
private ConnectionMultiplexer connectionMultiplexer;
public RedisCache()
{
ConfigurationOptions config = new ConfigurationOptions();
config.EndPoints.Add(GlobalConfig.Instance.GetConfig("RedisCacheUrl"));
config.Password = GlobalConfig.Instance.GetConfig("RedisCachePassword");
config.ConnectRetry = int.MaxValue; // retry connection if broken
config.KeepAlive = 60; // keep connection alive (ping every minute)
config.Ssl = true;
config.SyncTimeout = 8000; // 8 seconds timeout for each get/set/remove operation
config.ConnectTimeout = 20000; // 20 seconds to connect to the cache
connectionMultiplexer = ConnectionMultiplexer.Connect(config);
cache = connectionMultiplexer.GetDatabase();
}
public virtual bool Add(string key, TValue item)
{
return cache.StringSet(key, RawSerializationHelper.Serialize(item));
}
このクラスの複数のインスタンスを作成していないので、これは問題ではありません。接続メトリックを誤解している可能性があります。それらが実際に意味するのは、キャッシュにアクセスする回数ですが、私の意見では意味がありません。任意のアイデア、または同様の問題を抱えている人はいますか?