【发布时间】:2012-01-11 17:55:10
【问题描述】:
我有很多避免缓存的请求,因为它们的所有列表排列都已列出,即:
http://.....&var=a,b,c
http://.....&var=a,c,b
http://.....&var=b,a,c
http://.....&var=b,c,a
http://.....&var=c,a,b
http://.....&var=c,b,a
有没有一种聪明的方法可以将这些散列到相同的值?在查询字符串值的排序版本中是最简单的方法吗?
【问题讨论】:
-
为什么不确保在显示 URL 时始终按固定顺序生成参数?
-
@Oli 是外部API,我们不控制参数。
-
在其他条件相同的情况下,我肯定更喜欢 URL 的规范版本,而不是使用哈希,这意味着对它们进行排序。当然假设响应确实是相同的,例如它不包括 url 本身。清漆本身是否大量使用哈希?如果是这样,那么也许您应该在 url 上定义一个散列函数,将列表的组件分开,然后使用一些交换运算符(如加法)组合它们的散列,以给出整个 URL 的散列。
-
@Steve 这显然是一种合理的方法。我真的在这里寻找特定于 Varnish 的东西,因为一般的解决方案非常简单。添加哈希似乎确实比排序更好。
-
像加法这样的简单运算符的问题是,虽然它会碰撞“3,4,5”和“4,3,5”,但它也会碰撞“2,4,6”。 ..