J'utilise le cache Redis à des fins de mise en cache (en particulier stackexchange.Redis C# driver
. Je me demandais s'il existe des moyens d'obtenir toutes les clés disponibles dans le cache à tout moment. Je veux dire la même chose que je peux faire dans ASP.NET cache
objet (exemple de code ci-dessous)
var keys = Cache.GetEnumerator();
while(keys.MoveNext())
{
keys.Key.ToString() // Key
}
La documentation Redis parle de la commande KESY mais stackexchange.Redis
A-t-il une implémentation pour cette commande.
Débogage via l'instance connection.GetDataBase()
, je ne vois aucune méthode/propriété pour cela.
Une idée?
La fonction dont vous avez besoin se trouve sous l'interface IServer et peut être atteinte avec:
ConnectionMultiplexer m = CreateConnection();
m.GetServer("Host").Keys();
Notez qu'avant la version 2.8 du serveur redis qui utilisera la commande KEYS que vous avez mentionnée, elle peut être très lente dans certains cas. Cependant, si vous utilisez redis 2.8+ - il utilisera à la place la commande SCAN, qui fonctionne mieux. Assurez-vous également que vous vraiment devez obtenir toutes les clés, dans ma pratique, je n'en ai jamais eu besoin.
Essayez d'utiliser cet extrait de code, cela a fonctionné pour moi:
IServer server = Connection.GetServer("yourcache.redis.cache.windows....", 6380);
foreach (var key in server.Keys())
{
Console.WriteLine(key);
}
string connectionString = "my_connection_string";
ConfigurationOptions options = ConfigurationOptions.Parse(connectionString);
ConnectionMultiplexer connection = ConnectionMultiplexer.Connect(options);
IDatabase db = connection.GetDatabase();
EndPoint endPoint = connection.GetEndPoints().First();
RedisKey[] keys = connection.GetServer(endPoint).Keys(pattern: "*").ToArray();
Vous avez besoin de db pour distinguer où chercher les clés. Ainsi, la dernière ligne de réponse MTZ4 devient alors:
RedisKey[] keys = connection.GetServer(endPoint).Keys(database: db.Database, pattern: "*").ToArray();
où db.Database est l'identifiant numérique de la base de données Redis que vous souhaitez interroger.