c# - StackExchange.Redis - 如何获取 key 的类型?

标签 c# redis stackexchange.redis

我正在尝试通过 StackExchange.Redis 浏览 Redis 中的 dbX 列表,并查找键的特定类型。键有 stringlistsetzsethash 类型。假设我想在 db1 中找到 list 类型的键,我尝试了以下操作:

RedisCacheClient _client;
...
IRedisDatabase database = _client.GetDb(1);
List<InfoDetail> categorizedInfo = await database.GetInfoCategorizedAsync();
IEnumerable<InfoDetail> infos = categorizedInfo.Where(i => i.Category == "Keyspace");

这可以帮助我获取有关键 keys=9,expires=0,avg_ttl=0 的基本信息,但不能获取类型的基本信息。

我可以找到所有的 key :

IEnumerable<string> keys = await database.SearchKeysAsync("*");

但这只给了我名称,而不是键的类型。 那么,如何找到 key 的类型

这可以做到吗?

谢谢。

最佳答案

我想我已经找到了解决方案。 IRedisDatabase 类型具有 IDatabase 类型的 Database 属性,并且 IDatabase 类型具有 KeyType() 我可以使用的方法(我认为应该是 GetKeyType(),这样更容易找到)。这样,我就可以列出类型的键:

RedisCacheClient _client;
...
IRedisDatabase redisDatabase = _client.GetDb(1);
IEnumerable<string> keys = await redisDatabase.SearchKeysAsync("*");
IDatabase database = redisDatabase.Database;
Dictionary<string, RedisType> keysWithTypes = keys.ToDictionary(k => k, k => database.KeyType(k));

结果看起来像这样:

{[myHash, Hash]}
{[myZSet, SortedSet]}
{[myString, String]}
{[mySet, Set]}
{[mylist, List]}

关于c# - StackExchange.Redis - 如何获取 key 的类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58826459/

相关文章:

linux - Redis 服务器可以处理多少个并发读取调用?

linux - Redis:开放对外调用: `bind: Address already in use`

c# - StackExchange.Redis 对配置的 Masters/Slaves 做了什么?

c# - 使用最少的 API 配置 InvalidModelStateResponseFactory

c# - ASP.NET MVC Controller 处理文件下载

c# - 将自动属性转换为通知属性(WPF 中的 MVVM)

c# - 集合的 Where 子句

javascript - 获取 redis 列表中特定字符串的索引?

c# - Stackexchange Redis - 如何对大量记录进行分页

c# - StackExchange.Redis 在重负载时不读取响应