一、memcached-1.2.6-win32-bin.zip下載地址: http://code.jellycan.com/memcached/,執行memcached.exe -d install 安裝。html
二、守護進程方式啓動:memcached.exe -m 512 -d start
-d爲守護進程啓動,不能指定端口 默認端口11211
-m爲指定內存大小linux
三、指定端口啓動:memcached.exe –p 33000 -m 512
能夠啓動多個服務,命令行窗口關閉則服務中止。git
一、準備文件github
下載地址 :http://code.google.com/p/memcached/downloads/listweb
目前最新版本爲memcached-1.4.15.tar.gz (能夠wget http://memcached.googlecode.com/files/memcached-1.4.15.tar.gz)redis
這裏以memcached-1.4.15.tar.gz爲例做說明 windows
libevent-2.0.12-stable.tar.gz 下載地址 :http://libevent.org/(目前最新版本爲 libevent-2.0.20-stable.tar.gz 能夠緩存
wget http://cloud.github.com/downloads/libevent/libevent/libevent-2.0.20-stable.tar.gz )服務器
二、安裝libevent,先驗證ls /usr/lib |grep libevent 看是否安裝。併發
若出現相似如下信息說明已經安裝
ls /usr/lib |grep libevent
libevent-1.4.so.2
libevent-1.4.so.2.1.3
libevent-2.0.so.5
libevent-2.0.so.5.1.8
libevent.a
libevent_core-1.4.so.2
libevent_core-1.4.so.2.1.3
libevent_core-2.0.so.5
libevent_core-2.0.so.5.1.8
libevent_core.a
libevent_core.la
libevent_core.so
libevent_extra-1.4.so.2
libevent_extra-1.4.so.2.1.3
libevent_extra-2.0.so.5
libevent_extra-2.0.so.5.1.8
libevent_extra.a
libevent_extra.la
libevent_extra.so
libevent.la
libevent_pthreads-2.0.so.5
libevent_pthreads-2.0.so.5.1.8
libevent_pthreads.a
libevent_pthreads.la
libevent_pthreads.so
libevent.so
#用tar命令解壓安裝文件
[root@localhost local]# tar -zxvf libevent-2.0.20-stable.tar.gz
用./configure命令進行配置,檢查當前的環境
[root@localhost libevent-2.0.20-stable]./configure –prefix=/usr
[root@localhost libevent-2.0.20-stablemake
[root@localhost libevent-2.0.20-stablemake install
[root@localhost local]# tar -zxvf memcached-1.4.15.tar.gz
[root@localhost local]# cd memcached-1.4.15
[root@localhost memcached-1.4.15]# ./configure
[root@localhost memcached-1.4.15]# make
[root@localhost memcached-1.4.15make install
驗證安裝
#ll /usr/local/bin | grep memcached
-rwxr-xr-x 1 root root 245683 Sep 25 16:04 memcached
# /usr/local/bin/memcached -d -m 512 -c 512 -p 11211 -u root -t 10
-d選項是啓動一個守護進程。
-m是分配給Memcache使用的內存數量,單位是MB。
-u是運行Memcache的用戶。
-l是監聽的服務器IP地址,若是有多個地址的話,指定下服務器的I監聽P地址。
-p是設置Memcache監聽的端口,我這裏設置了11211,最好是1024以上的端口,咱們這裏統一使用11211-c選項是最大運行的併發鏈接數,默認是1024。
-P是設置保存Memcache的pid文件。
-vv 用very vrebose模式啓動,調試信息和錯誤輸出到控制檯 。
更多能夠參考 # /usr/local/bin/memcached -h
能夠在一臺機器上啓動若干進程 如
[root@localhost local]# ps -ef | grep memcach
root 26928 1 0 16:17 ? 00:00:00 /usr/local/bin/memcached -d -m 64 -c 64 -p 11211 -u root -l 10.33.2.75 -P /tmp/memcached.pid
root 26968 1 0 16:18 ? 00:00:00 /usr/local/bin/memcached -d -m 64 -c 64 -p 11212 -u root -l 10.33.2.75 -P /tmp/memcached2.pid
root 26975 1 0 16:18 ? 00:00:00 /usr/local/bin/memcached -d -m 64 -c 64 -p 11213 -u root -l 10.33.2.75 -P /tmp/memcached3.pid
注意:若是你前面一切OK,那恭喜你,你能夠正常使用了。若是出現一些錯誤,請不要擔憂:
error while loading shared libraries: libevent-2.0.so.5: cannot open shared object file: No such file or directory
解決辦法:
1.首先 find / -name libevent-2.0.so.5 找到缺乏的連接文件。
2.LD_DEBUG=libs /usr/local/bin/memcached -v
3. 從Debug信息中就知道程序去哪裏找連接庫了。我這邊程序去 trying file=/usr/lib/libevent-1.4.so.2 而個人連接庫的實際存儲位置(根據機器的位,個人是64位的)是 /usr/local/lib64/libevent-1.4.so.2(在下面的位置隨便選擇一個就好了)
4. 作一個軟鏈接 ln -s /usr/local/lib64/libevent-2.0.so.5 /usr/lib/libevent-2.0.so.5
17768: trying file=/lib64/tls/x86_64/libevent-2.0.so.5
17768: trying file=/lib64/tls/libevent-2.0.so.5
17768: trying file=/lib64/x86_64/libevent-2.0.so.5
17768: trying file=/lib64/libevent-2.0.so.5
17768: trying file=/usr/lib64/tls/x86_64/libevent-2.0.so.5
17768: trying file=/usr/lib64/tls/libevent-2.0.so.5
17768: trying file=/usr/lib64/x86_64/libevent-2.0.so.5
17768: trying file=/usr/lib64/libevent-2.0.so.5
驗證是否啓動成功
[root@bookedb ~]# netstat -ntlp|grep memcached
[root@bookedb ~]# pgrep -l memcached
16321 memcached
[root@bookedb ~]# kill -9 16321
或者
一、命令中輸入:telnet 192.168.120.28 11211(你安裝的主機的ip和memcached啓動端口),而後直接敲擊stats命令
stats
STAT pid 16321
STAT uptime 2831
STAT time 1322126000
STAT version 1.4.6
STAT libevent 2.0.12-stable
STAT pointer_size 64
STAT rusage_user 0.004999
STAT rusage_system 0.004999
STAT curr_connections 12
STAT total_connections 18
STAT connection_structures 13
STAT cmd_get 6
STAT cmd_set 7
STAT cmd_flush 0
STAT get_hits 5
STAT get_misses 1
STAT delete_misses 0
STAT delete_hits 1
STAT incr_misses 0
STAT incr_hits 0
STAT decr_misses 0
STAT decr_hits 0
STAT cas_misses 0
STAT cas_hits 0
STAT cas_badval 0
STAT auth_cmds 0
STAT auth_errors 0
STAT bytes_read 5023
STAT bytes_written 7246
STAT limit_maxbytes 536870912
STAT accepting_conns 1
STAT listen_disabled_num 0
STAT threads 4
STAT conn_yields 0
STAT bytes 2479
STAT curr_items 2
STAT total_items 7
STAT evictions 0
STAT reclaimed 0
END
查詢狀態命令:stats
查詢版本號 version
退出命令 quit
清空緩存數據(實際上是將全部緩存數據標記爲過時):flush_all
memcached的協議與數據存取
所謂協議,能夠理解爲對其操做(數據存取)的語法規則,存取數據的經常使用命令和參數以下:
set:存入一條記錄
key:記錄的鍵值
flags:十進制的int,標識存儲記錄時的客戶端標誌,在記錄取出時會返回。
exptim:數據的過時時間,0表示不過時,其餘數值則表示有效的毫秒數,在過時後,客戶端將取不到這條記錄,memcached中的過時記錄會被清空或刪除。
get:表示從memcached取出key對應的值,若是沒有對應的值則返回結束標誌END
append:表示對key所對應的值在最後再加入輸入的內容
delete:刪除key對應的值
參考摘自 http://cnazure.com/2011/12/windows-linux-memcached-install-configuration/
存儲命令的格式:
1
2
|
<command name> <key> <flags> <exptime> <bytes>
<data block>
|
參數說明以下:
<command name> | set/add/replace |
<key> | 查找關鍵字 |
<flags> | 客戶機使用它存儲關於鍵值對的額外信息 |
<exptime> | 該數據的存活時間,0表示永遠 |
<bytes> | 存儲字節數 |
<data block> | 存儲的數據塊(可直接理解爲key-value結構中的value) |
(1)、不管如何都存儲的set
這個set的命令在memcached中的使用頻率極高。set命令不但能夠簡單添加,若是set的key已經存在,該命令能夠更新該key所對應的原來的數據,也就是實現更新的做用。
能夠經過「get 鍵名」的方式查看添加進去的記錄:
如你所知,咱們也能夠經過delete命令刪除掉,而後從新添加。
(2)、只有數據不存在時進行添加的add
(3)、只有數據存在時進行替換的replace
能夠看到,刪除已存在的鍵值和不存在的記錄能夠返回不一樣的結果。
get命令的key能夠表示一個或者多個鍵,鍵之間以空格隔開
能夠看到,gets命令比普通的get命令多返回了一個數字(上圖中爲13)。這個數字能夠檢查數據是否發生改變。當key對應的數據改變時,這個多返回的數字也會改變。
cas即checked and set的意思,只有當最後一個參數和gets所獲取的參數匹配時才能存儲,不然返回「EXISTS」。
執行stats items,能夠看到STAT items行,若是memcached存儲內容不少,那麼這裏也會列出不少的STAT items行。
咱們執行stats cachedump 1 0 命令效果以下:
這裏slab_id爲1,是由2中的stats items返回的結果(STAT items後面的數字)決定的;limit_num看起來好像是返回多少條記錄,猜的一點不錯, 不過0表示顯示出全部記錄,而n(n>0)就表示顯示n條記錄,若是n超過該slab下的全部記錄,則結果和0返回的結果一致。
經過stats items、stats cachedump slab_id limit_num配合get命令能夠遍歷memcached的記錄。
如stats slabs,stats sizes,stats reset等等使用也比較常見。
在現有的緩存數據後添加緩存數據,如現有緩存的key不存在服務器響應爲NOT_STORED。
和append很是相似,但它的做用是在現有的緩存數據前添加緩存數據。
該命令有一個可選的數字參數。它老是執行成功,服務器會發送 「OK\r\n」 迴應。它的效果是使已經存在的項目當即失效(缺省),或在指定的時間後。此後執行取回命令,將不會有任何內容返回(除非從新存儲一樣的鍵名)。 flush_all 實際上沒有當即釋放項目所佔用的內存,而是在隨後陸續有新的項目被儲存時執行(這是由memcached的懶惰檢測和刪除機制決定的)。
flush_all 效果是它致使全部更新時間早於 flush_all 所設定時間的項目,在被執行取回命令時命令被忽略。
memcached還有不少命令,好比對於存儲爲數字型的能夠經過incr/decr命令進行增減操做等等,這裏只列出開發和運維中常用的命令,其餘的再也不一一舉例說明。
web站點中緩存的重要性毋庸置疑。我想不少asp.net開發人員在開發web應用系統的時候優先考慮使用的緩存並非第三方緩存解決方案(好比分佈式緩存memcached、redis等等),而應該是.net framework已經提供的多種緩存解決方案。下面結合本身的開發經驗談談對.net framework中緩存的認識。
一、System.Web.Caching.Cache
估計大部分作過asp.net開發的人都用過這個命名空間下的緩存,咱們能夠直接使用HttpContext.Current.Cache實例而不用實例化。固然這個命名空間下的Cache類是容許您實例化的,須要定製本身的緩存系統的固然能夠徹底本身控制如何初始化這個類。我在園子裏看到過有不少文章介紹Cache的CRUD輔助類庫大多數都是針對System.Web.Caching.Cache。
須要說明的是,咱們還能夠經過該命名空間下的HttpRuntime.Cache實現web、控制檯、winform等不一樣表現形式下的緩存,並且徹底無需本身實例化。HttpRuntime.Cache是以前我的開發中使用比較多的一個類,如今比較偏心.net framework4.0中的加強型的緩存類MemoryCache。
二、Output Cache
衆所周知,輸出緩存主要分頁面輸出緩存和頁面部分緩存。說白了,就是緩存整個頁面的html或者部分html,原本沒什麼值得討論的,可是最近看到dudu的這篇博客才恍然發現,想不到使用它還真是大有講究,我之前怎麼就沒有發現這個問題呢?看來發現問題和解決問題的能力一樣重要,有時候前者甚至更重要啊。
三、System.Runtime.Caching
如今我的開發中使用最多的類MemoryCache出自這個命名空間,使用前須要引用using System.Runtime.Caching。MemoryCache繼承自ObjectCache, IEnumerable, IDisposable,其中ObjectCache是個抽象類。用過MemoryCache的人都知道,這個MemoryCache有一個屬性叫Default,一般能夠像下面這樣使用:
private static ObjectCache memCache = MemoryCache.Default;
固然咱們也徹底能夠經過public MemoryCache(string name, NameValueCollection config = null)構造函數初始化緩存對象。
接着咱們能夠在web.config文件中配置每一個MemoryCache實例運行的內存使用配額方案和配額檢查週期,下面示例參考MSDN:
<system.runtime.caching> <memoryCache> <namedCaches> <add name="Default" cacheMemoryLimitMegabytes="10" pollingInterval="00:02:00"/> </namedCaches> </memoryCache> </system.runtime.caching>
這些配置意義在於能夠明確指定每一個MemoryCache實例運行的內存使用配額方案和配額檢查週期。好比咱們能夠經過配置來按需更改MemoryCache.Default實例的內存配額(不知道緩存可用最大內存是多少,可能仍是傳說中的800M左右)。緩存過時策略與其它的緩存框架大同小異,與System.Web.Caching.Cache的不一樣只是名稱不叫CacheDependency,而叫ChangeMonitor,而且提供了基於文件和目錄的緩存依賴策略。關於緩存過時策略也比較有探討的必要,不過我的開發中比較偏重於數據緩存和替換,目前尚未接觸和使用過比較完美的過時策略解決方案。
摘自 http://www.cnblogs.com/jeffwongishandsome/archive/2011/11/06/2238265.html