我正在尝试找到一些遵循模式的密钥,但我需要所有相关的密钥,而不仅仅是特定服务器中的密钥。
到目前为止,我正在尝试使用文档示例访问特定服务器,但它不起作用。
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
我会感激任何帮助。
答案 0 :(得分:5)
首先,你使用的是redis服务器版本?可用的服务器命令因服务器而异,在2.8之前的版本上,必须使用KEYS
命令而不是SCAN
命令。 KEYS
命令因引起严重的性能问题而众所周知,除了奴隶之外,不应该在生产中使用KEYS
命令。如果你正在使用< 2.8,是的,我希望SCAN
导致超时。
但是,KEYS
和SCAN
最终都表明您没有按预期方式使用redis。您不应该发现自己需要将这些命令用于常规操作。 应该常规使用它们的唯一工具是管理/数据探索工具。并且他们应该理想地针对奴隶,而不是主人。
通常有其他方式可以执行人们倾向于KEYS
和SADD
的任何操作 - 例如,将密钥存储在单个集合中的特定组中({{1}}等)
答案 1 :(得分:0)
如果您需要所有KEY *,则将它们保留为一个值将提高速度。您可以将对象保留在AllKeys下以显示所有Key。
SetAllObject
server.StringSetAsync("AllKeys", JsonConvert.SerializeObject(obj));
GetAllObject
JsonConvert.DeserializeObject<List<TEntity>>(await server.StringGetAsync("AllKeys")).ToList();