缓存大量数据的关键策略

时间:2017-08-22 17:28:48

标签: performance caching scalability

我有大约3MB的信息非常难以产生。它是在查询完成后连接查询一些非常大的表和繁重处理的组合。最重要的是,经常读取结果信息(每个客户端每分钟4-10次,所有客户端为3000)。

我应该将信息存储在单个密钥下的缓存中,还是应该在每次需要时将其分解并检索N个部分?

详细说明:
- 我不认为这是一个基于意见的问题"因为可以用代码证明存在更好/更糟的情况 - 我不能先发制人地知道哪个"碎片"将包含我需要的信息......将其视为银行对账单,银行经理可以同时查找"转账"并且" $ 1400.00" ...因此我必须检索整个事情以进一步过滤/分类
- 数据不平坦,但 嵌套。大部分物品(约70%只有2升,其余为3升) - 我使用Redis作为缓存服务器,以及c# - Asp.Net MVC 4
- 过滤是单一来源并应用于4个字段(单个搜索框试图匹配4个字段的值) - 排序始终按日期

1 个答案:

答案 0 :(得分:0)

  

我应该将信息存储在单个密钥下的缓存中,还是应该在每次需要时将其分解并检索N个部分?

您需要考虑:

  • 您可以缓存的最大对象大小是多少(例如,memcached为1MB默认max_item_size,而redis字符串类型为512MB)
  • 对您的工作量实际上有意义的事情(例如,分成N个部分;您是否会使用单个部分?)
  

最重要的是,结果信息经常被读取(每个客户每分钟4-10次,所有客户端为3000)。

仅基于此声明,我的解释是相同信息返回3000次。因此,对于单个密钥,对于N个块,这将是3000个缓存请求,即N * 3000个请求。已经很容易看出哪一个更贵。加上组合N件所需的计算时间。

您可以同时执行这两项操作:

  • 让客户的请求使用单个密钥。
  • 让您的服务器端使用N个缓存密钥,并尽可能重用现有的中间结果,将它们组合起来并使用单个密钥存储结果。