在我的Azure ASP.NET MVC网站中,我想显示有多少客户端连接到一个Redis会话状态提供程序,以及它们活动了多长时间。我使用Azure Github上的aspnet-redis提供者库。
在Redis中,它创建一个{app_name_[sessionkey}_Internal键,其中包含配置的会话超时值的SessionTimeout键。该密钥的过期设置为该时间,当您为该密钥检查TTL时,您将看到会话访问。
如何使用会话状态提供程序库访问此信息?如果这是不可能的,是否还有其他库可以用于安全地查询此信息,而不干扰会话状态提供程序?
发布于 2017-04-07 07:36:17
以下是我所能做的。我创建了自己的会话对象集合,并抓取了所有的键(我将其放入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);
}
https://stackoverflow.com/questions/38049051
复制相似问题