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

标签 stackexchange.redis azure-redis-cache

我是 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/

相关文章:

sql-server - 将SQL表与Azure Redis缓存同步

caching - Azure Redis 缓存超时和无连接错误

azure - 无法连接 Azure Redis 缓存

stackexchange.redis - 没有可用的连接来服务此操作(Redis 客户端)

azure - 使用 ARM 配置 Azure Redis 缓存并指定访问 key

c# - StackExchange.Redis - 如何获取 key 的类型?

c# - 在为 Azure Functions 3.0 添加单例时注入(inject) ILogger

c# - 使用 StackExchange.Redis 连接到 Azure Redis 缓存时出错

c# - 如何通过 StackExchange.Redis 删除 redis 中的所有键值

asp.net - StackExchange.Redis StringGet 超时