私はキャッシュの目的(特に_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()
インスタンスを使用したデバッグでは、そのためのメソッドやプロパティはありません。
何か案が?
必要な関数はIServerインターフェイスの下にあり、次の方法でアクセスできます。
ConnectionMultiplexer m = CreateConnection();
m.GetServer("Host").Keys();
言及したKEYSコマンドを使用するredisサーバーのバージョン2.8より前のバージョンでは、特定の状況で非常に遅くなる可能性があることに注意してください。ただし、redis 2.8+を使用する場合-代わりにSCANコマンドが使用され、パフォーマンスが向上します。 本当にがすべてのキーを取得する必要があることも確認してください。私の実践では、これが必要になることはありません。
このコードスニペットを使ってみてください、それは私のために働きました:
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();
キーを探す場所を区別するには、dbが必要です。したがって、 MTZ4 回答の最後の行は次のようになります。
RedisKey[] keys = connection.GetServer(endPoint).Keys(database: db.Database, pattern: "*").ToArray();
ここで、db.Databaseは、クエリするRedisデータベースの数値識別子です。