nginx和memcache搭建html页面缓存

user-n1-mc-tomcat-t2

首先说一下流程:

用户访问一个html页面先到nginx1,nginx1去memcache中查找如果有返回。没有到server中将页面取回并放入memcache中。

首先要解决的就是memcache和nginx的结合问题,网上找了一下配置如下:

nginx

http {
    upstream memc_backend {  
        server  192.168.10.202:11211;  
        server  192.168.10.13:11211;  
        hash   $uri;
    }  
    server {
        listen 80;
        server_name  localhost;
        location / {
            set            $memcached_key "$uri";
            memcached_pass memc_backend; 
         error_page          501 404 502 = /fallback$uri;
        }
         
        location /fallback/ {
            proxy_pass          http://192.168.10.13/;
        }
    }
}

简易版的配置memc_backend是memcache集群,hash是采用的hash方式。

开了个虚拟机各种安装已经快吐血了

好不容易开始测试了,先用程序向memcache中差点值吧

越过长城google了个这个

com.danga.MemCached.MemCachedClient

随便找一个demo可是死活就是在memcache中找不到值,后来用telnet连到memcache用命令get一下key果然没有值。那就是代码的问题了,后来我发现只要key里有'/'这个工具类不知道会把它转换成什么。

又找了一下看到了这个

<dependency>
    <groupId>com.googlecode.xmemcached</groupId>
    <artifactId>xmemcached</artifactId>
    <version>2.0.0</version>
</dependency>

那闪闪的googlecode就是品质保证啊,果断用这个了。换了这个果然没问题了。

这个jar可以有多中集群配置

用CRC32算法,这是nginx1.8 upstream默认的hash算法

MemcachedClientBuilder builder = new XMemcachedClientBuilder(                                        AddrUtil.getAddresses("server1:11211 server2:11211 server3:11211")); 
 builder.setSessionLocator(ArrayMemcachedSessionLocator(HashAlgorithm.CRC32_HASH)); 
MemcachedClient mc = builder.build();
......

使用一致性哈希算法,要用这个nginx就要安装插件了,就不细说了

MemcachedClientBuilder builder = new XMemcachedClientBuilder(                                        AddrUtil.getAddresses("server1:11211 server2:11211 server3:11211")); 
 builder.setSessionLocator(new KetamaMemcachedSessionLocator()); 
 MemcachedClient mc = builder.build();
 ......

你可能感兴趣的:(nginx和memcache搭建html页面缓存)