結構圖以下: php
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,不然可能會顯示不正常。 html
memcached_buffer_size
語法: memcached_buffer_size size;
默認值: 4k|8k;
配置段: http, server, location
讀取從memcached服務器接收到響應的緩衝大小。儘快的將響應同步傳給客戶端。 nginx
memcached_connect_timeout
語法:memcached_connect_timeout time;
默認值:60s;
配置段:http, server, location
與memcached服務器創建鏈接的超時時間。一般不超過75s。 web
memcached_gzip_flag
語法:memcached_gzip_flag flag;
默認值:none
配置段:http, server, location
測試memcached服務器響應標誌。若是設置了,將在響應頭部添加了Content-Encoding:gzip。 mongodb
memcached_next_upstream
語法: memcached_next_upstream error | timeout | invalid_response | not_found | off ...;
默認值: error timeout;
配置段: http, server, location
指定在哪些狀態下請求將轉發到另外的負載均衡服務器上,僅當memcached_pass有兩個或兩個以上時使用。 django
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的值。 併發
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"); }
再次訪問:(直接從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的memc-nginx和srcache-nginx模塊能夠主動的向memcached添加緩存。後續整理後再發布出來。參見《memc_nginx+srcache_nginx+memcached構建透明的動態頁面緩存》http://www.ttlsa.com/html/2460.html
如需轉載請註明出處: http://www.ttlsa.com/html/2418.html