麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 服務器 > 管理維護 > 正文

memcachedb的緩存解決方案

2024-09-10 14:19:01
字體:
來源:轉載
供稿:網友

問題示例:
網站有千萬個網頁文件需要存儲,占用空間大約有300-400G,導致問題:
1 小文件太多,備份困難
2 空間增長很難調整
3 前端做緩存,因為object很高,效率很低,squid和lighttpd都不合適

解決方案說明:

1 nginx+memcached接口

Nginx有一個模塊是可以讀取memcached的數據的,可以把網頁文件內容保存到memcached里面,如果數據無效,則proxy到后端,后端服務器更新此數據

2 memcachedb接口

memcachedb是新浪的一個開源項目,用硬盤作為存儲空間,用的是Berkeley DB的存儲引擎,memcached的協議。
有memcached的方便性,同時有高效的讀寫性能,沒有內存作為存儲空間的限制,數據永久保留,同時使用局域網的機器就可以處理并且很容易共享,不限制為本地文件,有自動的備份機制。

3 php程序管理存儲

php處理memcached很容易,和前端約定相應的key即可

4 計劃任務處理更新

由于memcachedb是永久保存,前端無法判斷是否過期,所以需要自己制定策略刪除過期的網頁,以便前端獲取不到而自動更新

5 magent作為memcachedb的代理接口,解決備份問題

memcachedb有備份方法,我碰到過出現無法同步的情況,magent也可以幫助解決此問題,它是為memcached設計的,但由于memcachedb使用memcached協議,所以也同樣適用

解決方案配置示例:

假設www.aslibra.com/article/xxx 地址需要使用此方案,那就可以用服務器A(2)和B(3)作為memcachedb服務,可以在A(2)上跑magent,C(4)服務器是后端服務器,負責存入memcachedb數據

前端Nginx配置判斷:

 

upstream backend {
  server 192.168.1.4;
}
upstream memcachedb {
  server 192.168.1.2:11212;
  server 192.168.1.3:11212 backup;
}
server {
  server_name  www.aslibra.com;
  location / {
    proxy_pass http://backend;
  }
  location ~* ^/article/ {
    set $memcached_key $host$uri;
    default_type       text/html;
    memcached_pass     memcachedb;
    error_page         404 = /fallback;
  }
  location = /fallback {
    internal;
    proxy_set_header  memcached_key $memcached_key;
    proxy_pass http://backend;
  }
}



定義了memcachedb的upstream,有一個是backup標識的
/article/的請求會先查詢memcachedb,找不到再發送到后端服務器
注意 proxy_set_header  memcached_key $memcached_key 這句,可以保持key值的一致性
對于中文出現在地址的情況很實用,后端使用$_SERVER['REQUEST_URI'] 會和 $uri 不一致

A和B緩存服務器:

 

memcachedb -p 11212 -l 0.0.0.0 -u root -d -r -N -H /data/aslibra.com/article/



如果配置主從,那可以啟用magent:

 

magent -s 192.168.1.2:11212 -b 192.168.1.3:11212
#默認監聽 0.0.0.0:11211,提供給PHP使用
#比如這里是在192.168.1.2上運行



C服務器配置rewrite(lighttpd):

 

$HTTP["host"] == "www.aslibra.com" {
        server.document-root = "/data/www.aslibra.com/"
        url.rewrite-once = (
                "^/article" => "/php/cache.php"
        )
}



PHP代碼參考:

 

<?
//do sth to build html
echo $html;

//如果有傳遞memcached_key值就把結果存入memcachedb
//不需要設置緩存時間,因為沒有用 :)
//有需要更新,那就記錄一下日志
if($_SERVER['HTTP_MEMCACHED_KEY']){
  $m = new Memcache;
  if($m->connect('192.168.1.2', 11211) ){
    $key = $_SERVER['HTTP_MEMCACHED_KEY'];
    $m->set($key, $html);
    //有必要就記日志
    //log to file...
  }
}
?>



刪除文件:

如果有記錄日志(可以是web服務器日志或者php記錄的日志),可以根據保存的日志處理
需要刪除的 $m->delete($key) 即可

備份請參考memcachedb的操作指南。
此解決方案適合memcached的存儲方式,況且不用處理過期的問題,php可以解決過期時間
文章更新請關注本文更新:
http://www.aslibra.com/blog/post/memcachedb_cache_solution.php

參考資料:
1 Berkeley DB
2 memcachedb
3 magent
4 NginxModules
5 嵌入式數據庫系統Berkeley DB
6 memcached和magent的安裝
7 memcachedb的安裝

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 成人综合在线观看 | 中文字幕极速在线观看 | 欧美一级免费在线观看 | 性感美女一级毛片 | 精品999久久久| 91丨九色丨国产在线观看 | 国产流白浆高潮在线观看 | 国产精品一区二区羞羞答答 | 亚洲91精品 | 九色 在线 | 国产第一页精品 | 99国产精品国产免费观看 | 91久久久久 | 国产艳妇av视国产精选av一区 | 美女在线观看视频一区二区 | 欧美一级黄色录像片 | 中文日韩欧美 | 欧美日韩高清不卡 | 久久久久中文字幕 | 在线视频观看成人 | 欧美一级一区二区三区 | 午夜神马福利视频 | 成人免费在线播放 | 国产成人小视频在线观看 | 一级国产航空美女毛片内谢 | 精品一区二区三区在线观看视频 | 成人在线网站 | 极品美女一级毛片 | 国产亚洲精品精 | 国产一区二区三区色淫影院 | 69性欧美高清影院 | 免费观看一区二区三区 | 成人综合一区二区 | 狠狠色成色综合网 | 午夜精品成人 | 免费黄网站在线播放 | 日韩一级片免费 | 国产精品亚洲一区二区三区在线观看 | 国内自拍网址 | 免费观看视频在线观看 | 久久国产精品区 |