HAproxy 进行缓存查找但没有命中

HAproxy 进行缓存查找但没有命中

我的情况是:缓存已启用,正在进行查找,但没有缓存命中。

这是我的配置:

cache cache-foo
  total-max-size 32
  max-object-size 1024
  max-age 120

backend foo_backend
  http-request cache-use cache-foo if { path_beg /api/ }
  server app1 10.116.0.1:80 check
  server app2 10.116.0.2:80 check
  server app3 10.116.0.3:80 check
  http-response cache-store cache-foo

我通过数据平面启用了缓存。我可以通过连接套接字并运行来检查缓存是否正在运行show cache

show cache
0x7f100f50a03a: cache-foo (shctx:0x7f100f50a000, available blocks:32768)

运行后show stats我可以看到大约有 50 个“缓存查找”,但是有 0 个“缓存命中”。

我假设由于我正在进行查找,因此正在搜索缓存数据,但不知何故缓存并未被填充。

这可能是因为定义中的语句顺序造成的吗backend?如果是这样,有没有办法通过 dataplane-api 来更改它们?

答案1

HAProxy 会遵守后端在Cache-Control标头中发回的内容。在我的例子中,max-age发送了 0,这导致 HAProxy 跳过缓存。

将该值更改为大于 0 的值将允许 HAProxy 的缓存工作。并且该值将优先于 haproxy.cfg 中指定的值。

您可以检查响应是否由缓存提供,因为age返回了 的标头。

相关内容