2016-06-27 9 views
0

私のAzure ASP.NET MVC Webサイトでは、Redisセッションの状態プロバイダに接続されているクライアントの数とそれらのアクティブ期間を表示します。私はAzure Githubでaspnet-redis-providers libを使用します。RedisSessionStateProviderからアクティブなセッションのリストを取得

Redisでは、{[app_name] _ [sessionkey] _Internalキーと、設定されたセッションタイムアウトの値を持つSessionTimeoutキーが作成されます。そのキーのEXPIREはその時刻に設定され、キーのTTLをチェックするとセッションアクセスが表示されます。

セッション状態プロバイダライブラリを使用してこの情報にアクセスするにはどうすればよいですか?それが不可能な場合は、この情報を安全に照会するためにセッション状態プロバイダに干渉することなく使用できる他のライブラリがありますか?

+0

意志あなたがアクセスできるか(1つのクライアントは、多くのキーと値のペアを格納することができます) – Aravind

+0

私はそう思う。すべてのキーは、私はそれはあなたの使用しているクライアントの正確な数を与えないことを意味?十分できますが、私が推測する値を得ることもできます。それはセッション状態プロバイダが既にロックなどとのオープンな接続を持っていることと関係があり、私はそれを私のクエリを行うために再利用したいと思います – Rogier

+0

それはキーバリューストアです。あなたがロックできるソートのライブ接続があるかどうかはわかりません。クライアントがRedisキャッシュに接続するための資格情報を持っていれば、いつでも使用できます。 – Aravind

答えて

1

ここに私ができたことがあります。私は自分自身のセッションオブジェクトコレクションを作成し、すべてのキー(DB1に入れている)をつかんで、すべてのキーをループしてTTLを取得します。

using StackExchange.Redis; 
using StackExchange.Redis.Extensions.Newtonsoft; 
using StackExchange.Redis.Extensions.Core; 
using System.Linq; 

    private static Lazy<ConnectionMultiplexer> conn = new Lazy<ConnectionMultiplexer>(
     () => ConnectionMultiplexer.Connect(ConfigurationManager.AppSettings["RedisServerMaster"] 
     + "," + ConfigurationManager.AppSettings["RedisServerSlave"] 
     + "," + ConfigurationManager.AppSettings["RedisOptions"]) 

    public class SessionObjects 
    { 
     public string SessionId { get; set; } 
     public TimeSpan? TTL { get; set; } 
    } 

    List<SessionObjects> lso = new List<SessionObjects>(); 
    var serializer = new NewtonsoftSerializer(); 
    StackExchangeRedisCacheClient cacheClient; 
    cacheClient = new StackExchangeRedisCacheClient(rConn, serializer, 1); 
    IEnumerable<string> keys = cacheClient.SearchKeys("*"); 
    var db = rConn.GetDatabase(1); 
    foreach (var s in keys) 
    { 
     SessionObjects so = new SessionObjects(); 
     so.SessionId = s; 
     so.TTL = db.KeyTimeToLive(s); 
     lso.Add(so); 
    } 
+0

ありがとうございましたJeff、なぜならこれは私たちが離れてsessionstateproviderとして移動したからです。キューイング遅延のスパイクを引き起こす可能性のある連続したセッション要求(ASP側から)の間に最小時間があります。多くのAjaxリクエスト。 – Rogier

+0

遅延が見られる前に1秒間に何件のリクエストを管理していましたか?あなたのシステム構成とネットワーク設定は何でしたか? Redisのどのバージョンを使用していましたか? – Jeff

関連する問題