分享

基于Redis+Srcache_nginx服务器缓存

本帖最后由 坎蒂丝_Swan 于 2015-1-23 17:34 编辑


问题导读

1.redis处理服务器缓存有什么优点?
2.Web应用层缓存如何起作用?










logo-nginx.png
nginx-reverse-proxy-conf

关于篇文章,是对之前 《分布式服务器集群架构方案思考》 的关于cache实践主要实现了基于redis和srcache_nginx服务器缓存(基于LNMP环境)


0x01.Web缓存的类型
在Web应用领域,Web缓存大致可以分为以下几种类型:

数据库数据缓存:
在大型网站下,会频繁地处理数据库信息,导致数据库压力增加,为了提供查询的性能,会将查询后的数据放到内存中进行缓存,下次查询时,直接从内存缓存直接返回,提供响应效率。比如常用的缓存方案有memcached等。

服务器端缓存:
A.代理服务器缓存:
关于服务器缓存,有很多种方式,常用的代理缓存有varnish和squid。
后来用的多的是varnish,Varnish是一款高性能的开源HTTP加速器,挪威最大的在线报纸Verdens Gang使用3台Varnish代替了原来的12台Squid,性能比以前更好。

关于varnish,可以看我之前搭建过的教程 《varnish缓存》
为了提前预备足够的承受能力,我这里下选择redis处理服务器缓存。
redis有很多优点适合当前环境:
  • 支持分布式redis拓展,当网站压力过大,一台redis支撑不住时候,可以增加分布式redis。
  • 键值存储数据,轻巧高效。redis被成为服务器开发的瑞士军刀,就是因为轻,快著名。

B.CDN缓存:
CDN(Content delivery networks)缓存,也叫网关缓存、反向代理缓存。CDN缓存一般是由网站管理员自己部署,为了让他们的网站更容易扩展并获得更好的性能。

Web应用层缓存
主要在应用层逻辑添加缓存,关于这个已经集成在Jue的后台框架了,并且已经做过测试,《代码性能-php》
主要通过代码逻辑和缓存策略,实现对数据,页面,图片等资源的缓存,可以根据实际情况选择将数据存在文件系统或者内存中,减少数据库查询或者读写瓶颈,提高响应效率。

浏览器端缓存
浏览器缓存根据一套与服务器约定的规则进行工作,在同一个会话过程中会检查一次并确定缓存的副本足够新。这个部分主要由浏览器处理。
Nginx本身就自带缓存处理,我们可以直接在server里面对静态文件做过期处理,实现静态文件的缓存。




0x02.安装与配置A.Nginx编译安装
我用的是lnmp环境做开发,所以,在运行完lnmp安装后,要重新编译安装nginx,添加我们想要的模块。
先进去/lnmp-full/nginx/ 目录,编辑下nginx的配置,重新编译安装下nginx:
  1. cd lnmp1.1-full/nginx-1.6.0/
  2. vim install.sh
复制代码
添加下面的东西
  1. ./configure --user=www --group=www --prefix=/usr/local/nginx --add-module=/path/to/ngx_devel_kit-master --add-module=/path/to/set-misc-nginx-module--add-module=/path/to/srcache-nginx-module --add-module=/path/to/lua-nginx-module --add-module=/path/to/lua-resty-redis --add-module=/path/to/redis2-nginx-module--add-module=/path/to/echo-nginx-module  --with-ipv6make && make install
复制代码
这里我只显示几个必须安装的模块,具体包要自行下载,指明路径。
set-misc-nginx 是一个处理各个加密算法的包,在这里主要处理key的hash加密。

B.关于Lua
这里需要安装队lua的依赖,关于lua的安装,这里不说了。

C.关于Redis
安装redis,只要在官网下载个包,直接跑就可以了。
下面是redis配置文件。
  1. vim /path/to/redis.conf
  2. daemonize yespidfile /var/run/redis-6379.pidport 6379bind 127.0.0.1timeout 0tcp-keepalive 0loglevel noticelogfile stdoutdatabases 16stop-writes-on-bgsave-error yesrdbcompression yesrdbchecksum yesdbfilename dump.rdbslave-serve-stale-data yesslave-read-only yesrepl-disable-tcp-nodelay noslave-priority 100maxmemory 8096mb    maxmemory-policy volatile-ttlappendonly noappendfsync everysecno-appendfsync-on-rewrite noauto-aof-rewrite-percentage 100auto-aof-rewrite-min-size 64mblua-time-limit 5000slowlog-log-slower-than 10000slowlog-max-len 128hash-max-ziplist-entries 512hash-max-ziplist-value 64list-max-ziplist-entries 512list-max-ziplist-value 64set-max-intset-entries 512zset-max-ziplist-entries 128zset-max-ziplist-value 64activerehashing yesclient-output-buffer-limit normal 0 0 0client-output-buffer-limit slave 256mb 64mb 60client-output-buffer-limit pubsub 32mb 8mb 60hz 10aof-rewrite-incremental-fsync yes
复制代码

D.关于nginx配置
在http里面添加
  1. http{        upstream redis {            server 127.0.0.1:6379;                keepalive 512;    }}
复制代码
在server里面添加:
  1. server{    location = /redis_get {            internal;            set_md5 $redis_key $args;            redis_pass redis;    }    location = /redis_set {            internal;            set_unescape_uri $exptime $arg_exptime;    //过期时间更新            set_unescape_uri $key $arg_key;            //提取缓存            set_md5 $key;            redis2_query set $key $echo_request_body;  //添加缓存            redis2_query expire $key $exptime;         //过期处理            redis2_pass redis;    }    //这里是要做缓存的位置    location ~ [^/]\.php(/|$) {            set $key $request_uri;            set_escape_uri $escaped_key $key;            srcache_fetch GET /redis_get $key;          //获取缓存信息            srcache_default_expire 1;                   //过期处理            srcache_store PUT /redis_set key=$escaped_key&exptime=$srcache_expire;            try_files $uri =404;            fastcgi_pass  unix:/tmp/php-cgi.sock;            fastcgi_index index.php;            include fastcgi.conf;            access_log /home/wwwlogs/redis-cache.log access;        }}
复制代码
一样的,这里只是把主要的东西写进来了,其他东西记得添加进去。




0x03.测试结果没有做缓存状态:

没有做缓存状态:
2014-12-25-nginx-redis-srcache-cache-1.jpg

做缓存状态:
2014-12-25-nginx-redis-srcache-cache-2.jpg




本文出自夏日小草,转载请注明出处:http://homeway.me/2014/12/25/nginx-redis-srcache-cache/



欢迎加入about云群90371779322273151432264021 ,云计算爱好者群,亦可关注about云腾讯认证空间||关注本站微信

已有(2)人评论

跳转到指定楼层
stark_summer 发表于 2015-1-24 09:59:24
回复

使用道具 举报

gqx1984 发表于 2015-5-26 21:34:39
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条