Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

StackExchange.Redis - How to get the type of the key?

I am trying to go through the list of dbX in Redis via StackExchange.Redis and look for the particular type of the keys. There are string, list, set, zset, hash types of keys. Lets say I would like to find the list types of keys in the db1, I tried the following:

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

This helps me with getting the basic info about the keys keys=9,expires=0,avg_ttl=0 but not the types.

I can find all the keys:

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

But that gives me only the names, not the types of the keys. So, how do I find the type of the key?.

Is this possible to do?

Thanks.

like image 526
tridy Avatar asked Sep 17 '25 09:09

tridy


1 Answers

I think I have found the solution. the IRedisDatabase type has the Database propery of type IDatabase, and IDatabase type has KeyType() method that I could use (it should have been GetKeyType(), I think, which would've made it much easier to find). With that, I was able to list the keys with types:

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));

the result looks something like this:

{[myHash, Hash]}
{[myZSet, SortedSet]}
{[myString, String]}
{[mySet, Set]}
{[mylist, List]}
like image 176
tridy Avatar answered Sep 19 '25 22:09

tridy