caching - hash_data vcl_hash 的作用是什么?

标签 caching varnish varnish-vcl

谁能解释一下下面的vcl代码:

sub vcl_hash {
    hash_data(req.url);

    if (req.http.host) {
      hash_data(req.http.host);
    } else {
      hash_data(server.ip);
    }

    if (req.http.Cookie) {
      hash_data(req.http.Cookie);
    }
}

我只了解使用 hash_data 函数作为缓存键对 req.url 进行哈希处理。接下来的 if else 代码对我来说太模糊了。

最佳答案

hash_data 方法用于设置缓存对象的哈希值,即键。该键用于将对象与缓存中已有的对象进行比较。

在您发布的代码中,哈希值首先考虑的是所请求页面的 URL:req.url

但请注意,如果 Varnish 仅使用 URL 来哈希对象,则它会过于模糊,并可能导致相同的缓存被传递到不同的站点,例如 www.example.com/test_url 和 < em>www.example2.com/test_url。

为了避免这个问题,如果存在,它将添加主机(req.http.host)到哈希中,如果不存在,它将添加IP(server.ip ),例如 http://192.168.0.1/test_url

最后,它将检查 Cookie 是否存在,如果存在,则将它们添加到哈希中。当页面根据 cookie 显示不同的内容时,就会完成此操作。

关于caching - hash_data vcl_hash 的作用是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41604957/

相关文章:

ruby-on-rails - 如何在 Heroku 上刷新 Varnish 缓存

caching - 如何配置 Varnish 来缓存范围请求?

c# - 将数据推送到列表时,对 Redis 中持有错误类型值的键进行操作

java - 如何使用 JPA 2 二级缓存的另一个实现?

php - 我可以使用 Magento 的缓存层作为键/值存储吗?

wordpress - 使用Varnish + Nginx(HTTPS)时的重定向循环

regex - Varnish :在替换字符串中使用来自正则表达式的匹配

Varnish 4 : Remote Cache

session - asp.net 中的 session 、缓存和配置文件有什么区别