Nginx 高级篇(四)Nginx 直连 memcache

nginx当中可以实现直连memcache,这样比通过nginx转发到php,再由php的memcache扩展调取memcache库里面的方式至少快6倍!

nginx的memcached_module模块可以直接从memcached服务器中读取内容后输出,后续的请求不再经过应用程序处理,如php-fpm、django,大大的提升动态页面的速度。nginx只负责从memcached服务器中读取数据,要往memcached写入数据还得需要后台的应用程序来完成,主动的将要缓存的页面缓存到memcached中,可以通过404重定向到后端去处理的。
ngx_http_memcached_module可以操作任何兼用memcached协议的软件。如ttserver、membase等

结构图如下所示:

Nginx高级篇(四)Nginx直连memcache
memcached的key可以通过memcached_key变量来设置,如以$uri。如果命中,那么直接输出内容,没有命中就意味着nginx需要从应用程序请求页面。同时,我们还希望该应用程序将键值对写入到memcached,以便下一个请求可以直接从memcached获取
如果键值不存在,nginx将报告not found错误。最好的方法是使用error_page指定和location请求处理。同时包含”Bad Gateway”错误和”Gateway Timeout”错误,如:error_page 404 502 504 = @app ;。

server{

    location / {

        set $memcached_key "$uri"; #192.168.1.200/1.html 会把 /1.html 当作 key 去判断 mem中有没有缓存。
        memcached_pass 127.0.0.1:11211;
        error_page 404 /callback.php;#捕捉 404 信息 ,就回调 callback 页面,在根目录 html 目录下

            }

   }

回调页面【html/callback.php】:

<?php

   $uri=$_SERVER['REQUEST_URI'];          //获得访问的页面。

   //就可以根据访问的页面进行相应的数据库操作 读取数据返回并将数据写入到memcache当中去

?>

但是你可要知道memcache 是不能持久化数据的哈 也没有安全校验机制 不像redis一样 你要是将memcache对外开放 外网能访问其实还是比较危险的 别人写个脚本定时请求你 你的memcache服务就蹦喽!不能持久化也是个蛋疼的事!一重启全没了!不过也没关系,再去请求php写入到memcache!所以这种案例只适用于单存起到缓存作用的场景下!
更多实战请看:https://www.cnblogs.com/lpfuture/p/5800042...
当然Nginx当中也可以直接连接redis 速度相当快 性能相当高 安全性降低!

本作品采用《CC 协议》,转载必须注明作者和本文链接

胡军

huxiaobai_001
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!