使用nginx+memcached的小圖片存儲方案

今天整理存儲的時候發現80多臺服務器上都有一個計劃任務,每分鐘從管理後臺把圖片同步至本地。我統計了下使用一年多了只佔用很少了空間,圖片數量也很少,大小平均在10K左右。


這種情況我覺得再使用上面那種方式來進行同步就有點浪費了,而且還提高了維護成本,雖然計劃任務是通過puppet推送下去的。


於是我提出了整改方案,其中一個方案就是使用memcache來存儲圖片。nginx可以直接從memcahed中取出緩存展示給瀏覽器,從而提高性能。


memcached是nginx的核心模塊,默認是可以直接使用。這個模塊只能讀,不能寫,不過有第三方模塊可以做到。


貼出示例:


1) nginx的配置如下:

location ^~ /images/ {
    set $memcached_key  "$uri"; #用URI作爲key去memcached中去讀取內容
    memcached_pass      127.0.0.1:11211;
    memcached_connect_timeout 5s;
    memcached_read_timeout 5s;
    memcached_send_timeout 5s;
    memcached_buffer_size 32k;
    error_page     404 502 504 = @fallback;
}
location @fallback {
    proxy_pass     http://backend;
}


2) 使用PHP向memcached寫入一張圖片:

<?php
$pic = file_get_contents('./test.jpg');
$memcache = new Memcache;
$memcache->connect('localhost', 11211);
$memcache->add('/images/test.jpg', $pic, false, 0); //這裏設置緩存不過期
$memcache->close();


3) 使用瀏覽器訪問:http://localhost/images/test.jpg


上面是單臺memcached的示例,在生產環境中可以使用upstream模塊調度多個memcached實例來達到高可用。



參考文檔:http://nginx.org/en/docs/http/ngx_http_memcached_module.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章