我是 redis 的新手,所以我做错了什么,我敢肯定:
我在 Azure Redis 中存储了大约 16,000 个键/值。
我使用以下内容来编写键/值
foreach (var worksheet in wksList)
{
var wksYYMM = string.Format("{0}{1:00}", worksheet.ReviewDt.Year, worksheet.ReviewDt.Month);
var wksKey = string.Format("{0}:{1}:{2}", provCode, wksYYMM, worksheet.AcctNbr);
string jsonStr = JsonConvert.SerializeObject( MakeWsListDto(worksheet, provCoderList, rvrList));
cache.StringSet(wksKey, jsonStr);
}
所以我的 key 看起来像这样:
“AP:201401:AZ5798BK”
当我尝试查找时:
var keys = server.Keys(pattern: "AP:201401:*"); // returns in milliseconds
var keyAry = keys.ToArray(); // returns in over one minute
(note: this returns 12 keys)
返回 key 需要 1 分 12 秒。一旦我有了键,就需要几毫秒来检索这些键的值。如果我遍历键的值并返回值,我会得到类似的结果。我做了一个 ToArray() 只是为了隔离问题。
如果我在 redis-cli.exe 中尝试相同的查询,它会以毫秒为单位返回。
我是否错误地使用了这个命令?
最佳答案
server.Keys
自动在 KEYS
之间选择和首选 SCAN
基于服务器版本。我怀疑正在发生的事情是您正在使用 SCAN
页面太小。页面大小有一个可选参数。尝试指定比默认值大得多的值 - 数百、数千等。如果未指定,页面大小将使用 Redis SCAN
默认为 10
,这可能会导致需要大量往返。
关于StackExchange.Redis server.Keys(pattern :"IsVerySlow*"),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26438736/