web-dev-qa-db-ja.com

Redis Cacheデータベースからすべてのキーを取得する

私はキャッシュの目的(特に_stackexchange.Redis C# driver_)でRedisキャッシュを使用しています。キャッシュ内のすべてのキーをいつでも利用できるようにする方法はあるのかと思っていました。つまり、ASP.NETで同様のことができますcacheオブジェクト(コードサンプルの下)

_var keys = Cache.GetEnumerator();                               
while(keys.MoveNext())
{
     keys.Key.ToString() // Key
}
_

RedisのドキュメントではKESYコマンドについて説明しています ですが、_stackexchange.Redis_にはそのコマンドの実装があります。

connection.GetDataBase()インスタンスを使用したデバッグでは、そのためのメソッドやプロパティはありません。

何か案が?

10
Rahul

必要な関数はIServerインターフェイスの下にあり、次の方法でアクセスできます。

ConnectionMultiplexer m = CreateConnection();
m.GetServer("Host").Keys();

言及したKEYSコマンドを使用するredisサーバーのバージョン2.8より前のバージョンでは、特定の状況で非常に遅くなる可能性があることに注意してください。ただし、redis 2.8+を使用する場合-代わりにSCANコマンドが使用され、パフォーマンスが向上します。 本当にがすべてのキーを取得する必要があることも確認してください。私の実践では、これが必要になることはありません。

11
Evk

このコードスニペットを使ってみてください、それは私のために働きました:

IServer server = Connection.GetServer("yourcache.redis.cache.windows....", 6380);
foreach (var key in server.Keys())
{
   Console.WriteLine(key);
}

ソース

7
Tanvi Mathur
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();
7
MTZ4

キーを探す場所を区別するには、dbが必要です。したがって、 MTZ4 回答の最後の行は次のようになります。

RedisKey[] keys = connection.GetServer(endPoint).Keys(database: db.Database, pattern: "*").ToArray();

ここで、db.Databaseは、クエリするRedisデータベースの数値識別子です。

1
VChanis