StackExchange.Redis 如何查询所有的db Key
StackExchange.Redis how to query all db Keys
我试图找到一些遵循某种模式的密钥,但我需要所有相关的密钥,而不仅仅是特定服务器中的密钥。
到目前为止,我一直在尝试使用文档示例访问特定服务器,但它不起作用。
var connection = ConnectionMultiplexer.Connect(new ConfigurationOptions
{
EndPoints = { { DemoSettings.CustomerRedisCache.Url, DemoSettings.CustomerRedisCache.Port } },
Password = DemoSettings.CustomerRedisCache.Password
});
var server = connection.GetServer(host: DemoSettings.CustomerRedisCache.Url,
port: DemoSettings.CustomerRedisCache.Port);
var cadena = "cust:" + data.SearchString.Replace(' ', ':')+"*";
var valores = server.Keys(pattern: cadena);
最后一行总是因为超时而失败:S
如有任何帮助,我将不胜感激。
首先,您使用的是什么版本的redis服务器?可用的服务器命令因服务器而异,在 2.8 之前的版本上,必须使用 KEYS
命令而不是 SCAN
命令。 KEYS
命令以导致重大性能问题而闻名,不应该在生产中使用,除非可能在从站上使用。如果您使用的是 < 2.8,是的,我希望 KEYS
会导致超时。
但是,最终 SCAN
和 KEYS
都表明您没有按预期方式使用 Redis。您永远不会发现自己需要使用这些命令进行常规操作。 应该 经常使用的唯一工具是管理/数据探索工具。 他们理想情况下应该针对奴隶,而不是主人。
通常有其他方法可以做人们倾向于 SCAN
和 KEYS
的任何事情 - 例如,通过将密钥存储在一个特定组中的单个集合中(SADD
等)
如果您需要所有KEY*,将它们保留在一个值中会提高速度。您可以将对象保留在 AllKeys 下以显示所有 Keys。
SetAllObject
server.StringSetAsync("AllKeys", JsonConvert.SerializeObject(obj));
GetAllObject
JsonConvert.DeserializeObject<List<TEntity>>(await server.StringGetAsync("AllKeys")).ToList();
我试图找到一些遵循某种模式的密钥,但我需要所有相关的密钥,而不仅仅是特定服务器中的密钥。
到目前为止,我一直在尝试使用文档示例访问特定服务器,但它不起作用。
var connection = ConnectionMultiplexer.Connect(new ConfigurationOptions
{
EndPoints = { { DemoSettings.CustomerRedisCache.Url, DemoSettings.CustomerRedisCache.Port } },
Password = DemoSettings.CustomerRedisCache.Password
});
var server = connection.GetServer(host: DemoSettings.CustomerRedisCache.Url,
port: DemoSettings.CustomerRedisCache.Port);
var cadena = "cust:" + data.SearchString.Replace(' ', ':')+"*";
var valores = server.Keys(pattern: cadena);
最后一行总是因为超时而失败:S
如有任何帮助,我将不胜感激。
首先,您使用的是什么版本的redis服务器?可用的服务器命令因服务器而异,在 2.8 之前的版本上,必须使用 KEYS
命令而不是 SCAN
命令。 KEYS
命令以导致重大性能问题而闻名,不应该在生产中使用,除非可能在从站上使用。如果您使用的是 < 2.8,是的,我希望 KEYS
会导致超时。
但是,最终 SCAN
和 KEYS
都表明您没有按预期方式使用 Redis。您永远不会发现自己需要使用这些命令进行常规操作。 应该 经常使用的唯一工具是管理/数据探索工具。 他们理想情况下应该针对奴隶,而不是主人。
通常有其他方法可以做人们倾向于 SCAN
和 KEYS
的任何事情 - 例如,通过将密钥存储在一个特定组中的单个集合中(SADD
等)
如果您需要所有KEY*,将它们保留在一个值中会提高速度。您可以将对象保留在 AllKeys 下以显示所有 Keys。
SetAllObject
server.StringSetAsync("AllKeys", JsonConvert.SerializeObject(obj));
GetAllObject
JsonConvert.DeserializeObject<List<TEntity>>(await server.StringGetAsync("AllKeys")).ToList();