用法: nginx响应请求时,直接请求memcached,

如果没有相应的内容,再回调PHP页面,去查询database,并写入memcached.

 

分析: memcached是k/v存储, key-->value,

nginx请求memecached时,用什么做key?

一般用 uri arg 做key,  如 /abc.php?id=3

 

 

 

 

 

配置memcache集群

进入php配置文件,搜索一下memcached,看看是否引入了memcached,如果没有,需要安装php的memcached扩展。

发现没有安装,那么下面我们就需要在已经编译好php的情况下,安装memcached扩展

1. 因为我们以前编译过memcached,虽然make clean了,如果怕还是有影响,可以把memcached删除,再重新解压一下。

2.我们在编译memcached之前,要执行一下./configure命令,但是这里没有该命令,我们需要先执行phpize,之后就有./configure

注:http://www.jb51.net/article/37741.htm 这是一个关于phpize命令的详解

3.我们这里只需要配置一下php目录的选项就可以

4.

make && make install 之后,出现如下一句话,告诉你这个扩展在什么位置

5.进入到php配置文件,添加如下一句,来把memcached引入进来

6.杀php进程,并重启

7.在浏览器输入,test.php是自带的,里面有个函数,可以打php的相关信息,我们从这里可以看到php的基本信息,可以看到是有memcached扩展的。

在nginx的配置文件中做如下修改:

location / {

    #设置memcached的key是什么

set $memcached_key “$uri”;

#设置memcached的ip和端口,让nginx好知道去哪里找memcached

memcached_pass 127.0.0.1:11211;

#如果我们在memcached中没有找到key,那么我们去调用那个php程序

error_page 404 /claaback.ph;

}

upstream 实现集群memcached

    upstream memserver {  把用到的memcached节点,声明在一个组里

        hash_key $request_uri;  // hash计算时的依据,以uri做依据来hash

        server localhost:11211;

        server localhost:11212;

    }

Location里

 

        location / {

           # root   html;

           set $memcached_key $uri;

           memcached_pass memserver;  // memserver为上面的memcache节点的名称

           error_page 404 /writemem.php;

           index  index.php index.html index.htm;

        }

 

 

回调程序callback.php。连接数据库,取客户端需求的值,如果取到了,set进memcached,如果没取到,说没取到。

 

在地址栏输入192.168.1.200/user13.html

 

 

上面的例子是使用了一台memcached,如果使用的是多台memcached,也就是memcached集群,该如何?会出现如下的问题

 

posted on 2016-09-06 10:40  Mr.He多多指教  阅读(338)  评论(0编辑  收藏  举报