nginx+memcached构建页面缓存应用
来源:互联网 发布:淘宝钓鱼犯法吗 编辑:程序博客网 时间:2024/06/08 10:34
nginx的memcached_module模块可以直接从memcached服务器中读取内容后输出,后续的请求不再经过应用程序处理,如php-fpm、django,大大的提升动态页面的速度。nginx只负责从memcached服务器中读取数据,要往memcached写入数据还得需要后台的应用程序来完成,主动的将要缓存的页面缓存到memcached中,可以通过404重定向到后端去处理的。
ngx_http_memcached_module可以操作任何兼用memcached协议的软件。如ttserver、membase等。
结构图如下:
memcached的key可以通过memcached_key变量来设置,如以$uri。如果命中,那么直接输出内容,没有命中就意味着nginx需要从应用程序请求页面。同时,我们还希望该应用程序将键值对写入到memcached,以便下一个请求可以直接从memcached获取。
如果键值不存在,nginx将报告not found错误。最好的方法是使用error_page指定和location请求处理。同时包含"Bad Gateway"错误和"Gateway Timeout"错误,如:error_page 404 502 504 = @app;。
注意:需要设置default_type,否则可能会显示不正常。
1. 模块指令说明:
memcached_bind
语法: memcached_bind address | off;
默认值: none
配置段: http, server, location
指定从哪个IP来连接memcached服务器
memcached_buffer_size
语法: memcached_buffer_size size;
默认值: 4k|8k;
配置段: http, server, location
读取从memcached服务器接收到响应的缓冲大小。尽快的将响应同步传给客户端。
memcached_connect_timeout
语法:memcached_connect_timeout time;
默认值:60s;
配置段:http, server, location
与memcached服务器建立连接的超时时间。通常不超过75s。
memcached_gzip_flag
语法:memcached_gzip_flag flag;
默认值:none
配置段:http, server, location
测试memcached服务器响应标志。如果设置了,将在响应头部添加了Content-Encoding:gzip。
memcached_next_upstream
语法: memcached_next_upstream error | timeout | invalid_response | not_found | off ...;
默认值: error timeout;
配置段: http, server, location
指定在哪些状态下请求将转发到另外的负载均衡服务器上,仅当memcached_pass有两个或两个以上时使用。
memcached_pass
语法:memcached_pass address:port or socket;
默认值:none
配置段:location, if in location
指定memcached服务器地址。使用变量$memcached_key为key查询值,如果没有相应的值则返回error_page 404。
memcached_read_timeout
语法:memcached_read_timeout time;
默认值:60s;
配置段:http, server, location
定义从memcached服务器读取响应超时时间。
memcached_send_timeout
语法:memcached_send_timeout
默认值:60s
配置段:http, server, location
设置发送请求到memcached服务器的超时时间。
$memcached_key变量:
memcached key的值。
2. nginx memcached的增强版ngx_http_enhanced_memcached_module
基于nginx memcached 模块的,添加的新特性有:
1. 自定义HTTP头,如Content-Type, Last-Modified。
2. hash键可超过250个字符,memcached受限。
3. 通过HTTP请求将数据存储到memcached。
4. 通过HTTP请求从memcached删除数据。
5. 通过HTTP请求清除所有memcached缓存数据。
6. 通过HTTP请求获取memcached状态数据。
7. 键名空间管理,来部分刷新缓存。
8. 缓存通过If-Modified-Since头和内容Last-Modified来回复304Not Modified请求。
3. 应用实例
nginx配置实例:
upstream memcacheds {
server
10.1
.
240.166
:
22222
;
}
server {
listen
8080
;
server_name nm.ttlsa.com;
index index.html index.htm index.php;
root /data/wwwroot/test.ttlsa.com/webroot;
location /images/ {
set
$memcached_key $request_uri;
add_header X-mem-key $memcached_key;
memcached_pass memcacheds;
default_type text/html;
error_page
404
502
504
= @app;
}
location @app {
rewrite ^/.* /nm_ttlsa.php?key=$request_uri;
}
location ~ .*\.php?$
{
include
fastcgi_params;
fastcgi_pass
127.0
.
0.1
:
10081
;
fastcgi_index index.php;
fastcgi_connect_timeout
60
;
fastcgi_send_timeout
180
;
fastcgi_read_timeout
180
;
fastcgi_buffer_size 128k;
fastcgi_buffers
4
256k;
fastcgi_busy_buffers_size 256k;
fastcgi_temp_file_write_size 256k;
fastcgi_intercept_errors on;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
}
nm_ttlsa.php实例:
<?php
$fn = dirname(__FILE__) . $_SERVER[
'REQUEST_URI'
];
if
(file_exists($fn)) {
$data = file_get_contents($fn);
$m =
new
Memcached();
$servers = array(
array(
'10.1.240.166'
, 22222)
);
$m->addServers($servers);
$r=$m->set($_GET[
'key'
],$data);
header(
'Content-Length: '
.filesize($fn).
"\r\n"
);
header(
'Content-Type: image/gif'
.
"\r\n"
);
header(
'X-cache: MISS'
.
"\r\n"
);
print $data;
}
else
{
header(
'Location: http://www.ttlsa.com'
.
"\r\n"
);
}
4. 测试
第一次访问:(需要经过php处理)
再次访问:(直接从memcached读取)
哈,这个实例并不好。
1. 地球人都知道memcached不是持久化的,如果是永久性的图片应用,选用可以持久化存储方案合适,如riak、membase、ttserver、mongodb GridFS等等。
2. 如果是用户头像的应用,用memcached来做缓存也不合适。因为用户更改头像又得刷新缓存,鉴于此,一步到位的用ttserver或mongodb GridFS来做用户头像的存储岂不是更好么。
ttserver+nginx构建高并发高可用性应用参见:http://www.ttlsa.com/html/1429.html
这个实例改改或许可以用来在线迁移图片到key-value存储的过渡方案。
- nginx+memcached构建页面缓存应用
- nginx+memcached构建页面缓存应用
- nginx+memcached 构建页面缓存应用
- 页面级缓存 nginx+memcached
- memc_nginx+srcache_nginx+memcached构建透明的动态页面缓存
- memc_nginx+srcache_nginx+memcached构建透明的动态页面缓存
- PHP MemCached 缓存应用
- memcached-缓存应用问题
- nginx缓存机制构建
- nginx+tomact+memcached(缓存)集群
- nginx-页面缓存
- Nginx之页面缓存
- Nginx之页面缓存
- Nginx 页面缓存指令
- nginx memcache 页面缓存
- Nginx的配置与部署(13)应用模块之Memcached模块+Proxy_Cache双层缓存模式
- memcached分布式缓存应用教程
- nginx+tomcat+memcached构建session共享集群
- LeetCode题解:Remove Element
- 【mongodb系统学习之五】mongodb启动最常用参数
- cenos7 中文输入法
- c语言中结构体内存对齐规则详解
- 将centos7打造成桌面系统
- nginx+memcached构建页面缓存应用
- tttt
- 图片详解VMware DRS资源调度技术(组图)
- ttttt
- HDOJ 1201 18岁生日
- MapReduce理解
- 【第一步】iOS开发环境搭建
- 奖学金文章更新 连载第1篇 胡震雨 北京iOS第47期学员
- Meta 元数据之百度开发适配器