gpt4 book ai didi

c# - 从 RedisSessionStateProvider 获取事件 session 列表

转载 作者:可可西里 更新时间:2023-11-01 11:20:21 25 4
gpt4 key购买 nike

在我的 Azure ASP.NET MVC 网站中,我想显示有多少客户端连接到 Redis session 状态提供程序以及它们处于事件状态的时间。我使用 Azure Github 上的 aspnet-redis-providers 库。

在 Redis 中,它会创建一个 {[app_name]_[sessionkey}_Internal 键和一个 SessionTimeout 键,其值为配置的 session 超时值。该 key 的 EXPIRE 设置为该时间,当您检查 key 的 TTL 时,您会看到 session 访问。

如何使用 session 状态提供程序库来访问此信息?如果那不可能,是否可以使用任何其他库来安全地查询此信息,而不会干扰 session 状态提供程序?

最佳答案

这是我能做的。我创建了自己的 session 对象集合并获取了所有 key (我将其放入 DB 1),然后遍历所有 key 并获取 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);
}

关于c# - 从 RedisSessionStateProvider 获取事件 session 列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38049051/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com