簡體   English   中英

從RedisSessionStateProvider獲取活動會話的列表

[英]Get a list of active session from RedisSessionStateProvider

在我的Azure ASP.NET MVC網站中,我想顯示有多少個客戶端連接到Redis會話狀態提供程序以及它們處於活動狀態的時間。 我使用Azure Github上的aspnet-redis-providers庫。

在Redis中,它將創建一個{[app_name] _ [sessionkey} _Internal鍵以及一個SessionTimeout鍵,該鍵具有配置的會話超時值。 該密鑰的EXPIRE設置為該時間,當您為該密鑰檢查TTL時,將看到會話訪問。

如何使用會話狀態提供程序庫訪問此信息? 如果這不可能,那么我是否可以使用其他任何庫來安全地查詢此信息,而不會干擾會話狀態提供程序?

這就是我所能做的。 我創建了自己的會話對象集合,並獲取了所有鍵(將它們放入DB 1中),然后遍歷所有鍵並獲取了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);
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM