首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >从RedisSessionStateProvider获取活动会话列表

从RedisSessionStateProvider获取活动会话列表
EN

Stack Overflow用户
提问于 2016-06-27 00:23:27
回答 1查看 1.9K关注 0票数 0

在我的Azure ASP.NET MVC网站中,我想显示有多少客户端连接到一个Redis会话状态提供程序,以及它们活动了多长时间。我使用Azure Github上的aspnet-redis提供者库。

在Redis中,它创建一个{app_name_[sessionkey}_Internal键,其中包含配置的会话超时值的SessionTimeout键。该密钥的过期设置为该时间,当您为该密钥检查TTL时,您将看到会话访问。

如何使用会话状态提供程序库访问此信息?如果这是不可能的,是否还有其他库可以用于安全地查询此信息,而不干扰会话状态提供程序?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-04-07 07:36:17

以下是我所能做的。我创建了自己的会话对象集合,并抓取了所有的键(我将其放入DB 1中),然后循环遍历所有的键并获取TTL。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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);
    }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38049051

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文