Nginx memcache缓存和无效


Nginx memcache caching and invalidation

我们目前使用NGINX作为服务器,我们使用memcache来缓存php中的数据库查询和页面。

我们有一个版本编号系统,在任何更新或插入时,该版本号都会被提升,因此memcache将始终获取新数据,因为每个键都附加了该版本号。它对我们有效,因为读写百分比分割为80/20%,所以大多数时候memcache都会在不影响DB的情况下返回数据。

现在,我们计划将这种缓存策略转移到服务器级别,其中NGINX和memcache模块将使用请求uri和版本号来缓存GET请求。

只是需要一些关于我如何实现的反馈

  • 我可以获取存储在NGINX内存缓存中的这个版本号吗?(这将用于将其附加到请求uri中)
  • 如何处理已登录的用户?(如果nginx只是将请求传递到后端而不是memcache,我可以为登录用户设置一个cookie,并检查该cookie是否存在于nginx中吗?)

1)不幸的是,使用"vanilla"nginx无法做到这一点。但是有几个第三方nginx模块可以帮助您实现这一点。请看一下

增强memcached协议支持https://github.com/bpaquet/ngx_http_enhanced_memcached_modulehttp://wiki.nginx.org/NginxHttpMemcModule

价值评估https://github.com/vkholodkov/nginx-eval-module

我建议你有机会访问github.com/agentzh/ngx_openresty(nginx有很多补丁和模块)关于NGINX脚本代理的精彩演示zh.org/miss/slides/NGINX-conf-scripting/NGINX-comp-scripting.html

2) 互联网上有很多关于如何禁用日志用户缓存的例子

    if ($http_cookie ~* "auth_user") {
        # do some thing, set flag or so  
    }