本帖最后由 坎蒂丝_Swan 于 2015-1-23 17:34 编辑
问题导读
1.redis处理服务器缓存有什么优点?
2.Web应用层缓存如何起作用?
关于篇文章,是对之前 《分布式服务器集群架构方案思考》 的关于cache实践主要实现了基于redis和srcache_nginx服务器缓存(基于LNMP环境)
0x01.Web缓存的类型
在Web应用领域,Web缓存大致可以分为以下几种类型:
数据库数据缓存:在大型网站下,会频繁地处理数据库信息,导致数据库压力增加,为了提供查询的性能,会将查询后的数据放到内存中进行缓存,下次查询时,直接从内存缓存直接返回,提供响应效率。比如常用的缓存方案有memcached等。
服务器端缓存:
A.代理服务器缓存:关于服务器缓存,有很多种方式,常用的代理缓存有varnish和squid。 后来用的多的是varnish,Varnish是一款高性能的开源HTTP加速器,挪威最大的在线报纸Verdens Gang使用3台Varnish代替了原来的12台Squid,性能比以前更好。
为了提前预备足够的承受能力,我这里下选择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:
- cd lnmp1.1-full/nginx-1.6.0/
- vim install.sh
复制代码
添加下面的东西 - ./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
复制代码
这里我只显示几个必须安装的模块,具体包要自行下载,指明路径。
B.关于Lua 这里需要安装队lua的依赖,关于lua的安装,这里不说了。
C.关于Redis 安装redis,只要在官网下载个包,直接跑就可以了。 下面是redis配置文件。 - vim /path/to/redis.conf
- 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里面添加 - http{ upstream redis { server 127.0.0.1:6379; keepalive 512; }}
复制代码
在server里面添加: - 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.测试结果没有做缓存状态:
没有做缓存状态:
做缓存状态:
本文出自夏日小草,转载请注明出处:http://homeway.me/2014/12/25/nginx-redis-srcache-cache/
|