加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 运营中心 > Nginx > 正文

具有可变参数顺序的Nginx缓存

发布时间:2020-12-13 21:03:54 所属栏目:Nginx 来源:网络整理
导读:我正在使用基于请求URI的nginx生成缓存密钥,并查询直接检查memcache的参数,然后如果找不到缓存密钥则从PHP-FPM提供页面.我的问题是许多URL都有不同顺序的查询字符串选项,因此每个响应生成两个或多个单独的缓存键. 我的缓存设置类似于: set $cache_key "$uri

我正在使用基于请求URI的nginx生成缓存密钥,并查询直接检查memcache的参数,然后如果找不到缓存密钥则从PHP-FPM提供页面.我的问题是许多URL都有不同顺序的查询字符串选项,因此每个响应生成两个或多个单独的缓存键.

我的缓存设置类似于:

set $cache_key  "$uri?$args";

因此,使用不同顺序的查询字符串参数进入这些URL的URL最终会为同一类型生成多个可能的缓存键:

http://example.com/api/2.2/events.json?id=53&type=wedding&sort=title&limit=10
http://example.com/api/2.2/events.json?id=53&limit=10&type=wedding&sort=title
http://example.com/api/2.2/events.json?id=53&limit=10&sort=title&type=wedding

对n的广告恶心!可能性…

最终的结果是memcache通常填充速度比它应该快得多,因为我有一个潜在的n!-1重复的缓存内容副本,因为查询字符串参数的顺序不同.有没有办法在设置缓存键之前按字母顺序排序它们以避免这种情况?还有其他方法可以优雅地解决这个问题吗?

最佳答案
如果您知道哪些参数对缓存密钥生成很重要,那么您可以手动指定它们.根据你的例子,我写了下一个例子:

set $cache_key "$uri?id=$arg_id&type=$arg_type&sort=$arg_sort&limit=$arg_limit";

或者您可以使用嵌入式perl并编写自己的函数来生成缓存密钥,请参阅此处的示例http://wiki.nginx.org/Configuration#Embedded_Perl_examples

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读