达到特定缓存命中率的可行策略是什么?

时间:2018-04-20 21:36:40

标签: caching memcached ehcache

我们的团队正致力于为key-val查找服务构建缓存层,该服务具有使用2级缓存的一般准则:主机内和分布式层。需要70%的缓存命中率,因此预计只有30%的流量会落入下游NoSQL。在开始时,我们可以找出影响命中率的一些因素:

  1. TTL
  2. 缓存大小
  3. 查询模式:例如通常会查询15%的密钥。
  4. ......其他?
  5. 我们也有一些关于实现它的初步想法,比如一些预取数据要缓存,例如70%的数据。但最终我意识到它比我们想象的要复杂得多,我们需要更强大的理由。

    我们是否有与此问题相关的资源/研究或论文?或者做一些测试或加标的正确方法是什么?

1 个答案:

答案 0 :(得分:1)

有三个主要因素会影响您的命中率:

  1. 访问模式
  2. 缓存策略
  3. 工作集大小与缓存大小关系
  4. 访问模式通常无法控制,因为它取决于用户访问您的服务的方式。您可以控制缓存策略,但通常不会直接更改它以提高您的命中率。工作集通常不在您的控制范围内,因为它取决于访问模式,但您可以控制缓存大小。

    我会按照以下方式处理您的情况:

    1. 确保工作集适合您的缓存(易于操作)
    2. 改进缓存策略(更复杂,更耗时)
    3. 要找出您的工作集大小并确保它适合缓存,您可以从一个小缓存开始,逐渐(例如每隔几天)增加缓存大小并查看命中率增加多少。缓存获得的命中率越大越小,一旦达到收益递减点,就会知道你的工作集大小。您在此时获得的命中率是您获得缓存策略的最大值。

      如果您的工作集适合您的缓存并达到70%的要求,那么您就完成了。如果没有,您将需要调整您的缓存策略。这基本上需要聪明的工程。像Ben Manes这样的模拟建议对于这种聪明的工程来说绝对是一个非常有用的工具。