Skip to main content
 首页 » 编程设计

StackExchange.Redis server.Keys(pattern :"IsVerySlow*")

2025年05月04日123jyk

我是 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 ,这可能会导致需要大量往返。