[英]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.