文章目錄
- windows平台安裝
- Linux平台安裝
- 安裝memcached
- 啟動memcached
- 停止memcached(找到進程,殺掉進程)
- 1、添加
-
- 2、刪除
- 1、get
- 2、gets
- 3、cas
- 1、stats
- 2、stats items
- 3、stats cachedump slab_id limit_num
- 4、其他stats命令
- 1、append
- 2、prepend
- 3、flush_all
- 4、其他命令
- 1、添加
-
- 2、刪除
- 1、get
- 2、gets
- 3、cas
- 1、stats
- 2、stats items
- 3、stats cachedump slab_id limit_num
- 4、其他stats命令
- 1、append
- 2、prepend
- 3、flush_all
- 4、其他命令
一、memcached安裝配置windows平台安裝
1、memcached-1.2.6-win32-bin.zip: http://code.jellycan.com/memcached/,執行memcached.exe -d install 安裝。
2、守護進程方式啟動:memcached.exe -m 512 -d start
-d為守護進程啟動,不能指定連接埠 預設連接埠11211
-m為指定記憶體大小
3、指定連接埠啟動:memcached.exe –p 33000 -m 512
可以啟動多個服務,命令列視窗關閉則服務停止。
Linux平台安裝
1、準備檔案
:http://code.google.com/p/memcached/downloads/list
目前最新版本為memcached-1.4.15.tar.gz (可以wget http://memcached.googlecode.com/files/memcached-1.4.15.tar.gz)
這裡以memcached-1.4.15.tar.gz為例作說明
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 )
2、安裝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
安裝memcached
[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
啟動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
停止memcached(找到進程,殺掉進程)
[root@bookedb ~]# pgrep -l memcached
16321 memcached
[root@bookedb ~]# kill -9 16321
或者
# kill `/tmp/memcached.pid`
二、測試memcached
1、命令中輸入: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
三、Memcache的常用命令
查詢狀態命令: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/
Memcached常用命令及使用說明一、儲存命令
儲存命令的格式:
?
12 |
<command name> <key> <flags> <exptime> <bytes> <data block> |
參數說明如下:
<command name> |
set/add/replace |
<key> |
尋找關鍵字 |
<flags> |
客戶機使用它儲存關於索引值對的額外資訊 |
<exptime> |
該資料的存活時間,0表示永遠 |
<bytes> |
儲存位元組數 |
<data block> |
儲存的資料區塊(可直接理解為key-value結構中的value) |
1、添加
(1)、無論如何都儲存的set
這個set的命令在memcached中的使用頻率極高。set命令不但可以簡單添加,如果set的key已經存在,該命令可以更新該key所對應的原來的資料,也就是實現更新的作用。
可以通過“get 鍵名”的方式查看添加進去的記錄:
如你所知,我們也可以通過delete命令刪除掉,然後重新添加。
(2)、只有資料不存在時進行添加的add
(3)、只有資料存在時進行替換的replace
2、刪除
可以看到,刪除已存在的索引值和不存在的記錄可以返回不同的結果。
二、讀取命令1、get
get命令的key可以表示一個或者多個鍵,鍵之間以空格隔開
2、gets
可以看到,gets命令比普通的get命令多返回了一個數字(中為13)。這個數字可以檢查資料是否發生改變。當key對應的資料改變時,這個多返回的數字也會改變。
3、cas
cas即checked and set的意思,只有當最後一個參數和gets所擷取的參數匹配時才能儲存,否則返回“EXISTS”。
三、狀態命令1、stats
2、stats items
執行stats items,可以看到STAT items行,如果memcached儲存內容很多,那麼這裡也會列出很多的STAT items行。
3、stats cachedump slab_id limit_num
我們執行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的記錄。
4、其他stats命令
如stats slabs,stats sizes,stats reset等等使用也比較常見。
四、其他常見命令1、append
在現有的快取資料後添加快取資料,如現有緩衝的key不存在伺服器響應為NOT_STORED。
2、prepend
和append非常類似,但它的作用是在現有的快取資料前添加快取資料。
3、flush_all
該命令有一個可選的數字參數。它總是執行成功,伺服器會發送 “OK\r\n” 回應。它的效果是使已經存在的項目立即失效(預設),或在指定的時間後。此後執行取回命令,將不會有任何內容返回(除非重新儲存同樣的鍵名)。 flush_all 實際上沒有立即釋放項目所佔用的記憶體,而是在隨後陸續有新的項目被儲存時執行(這是由memcached的懶惰檢測和刪除機制決定的)。
flush_all 效果是它導致所有更新時間早於 flush_all 所設定時間的項目,在被執行取回命令時命令被忽略。
4、其他命令
memcached還有很多命令,比如對於儲存為數字型的可以通過incr/decr命令進行增減操作等等,這裡只列出開發和營運中經常使用的命令,其他的不再一一舉例說明。
補充一則:簡單認識.net framework中的幾種緩衝
web網站中緩衝的重要性毋庸置疑。我想很多asp.net開發人員在開發web應用系統的時候優先考慮使用的緩衝並不是第三方緩衝解決方案(比如分布式緩衝memcached、redis等等),而應該是.net framework已經提供的多種緩衝解決方案。下面結合自己的開發經驗談談對.net framework中緩衝的認識。
1、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。
2、Output Cache
眾所周知,輸出緩衝主要分網頁輸出快取和頁面部分緩衝。說白了,就是緩衝整個頁面的html或者部分html,本來沒什麼值得討論的,但是最近看到dudu的這篇部落格才恍然發現,想不到使用它還真是大有講究,我以前怎麼就沒有發現這個問題呢?看來發現問題和解決問題的能力同樣重要,有時候前者甚至更重要啊。
3、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
一、儲存命令
儲存命令的格式:
?
12 |
<command name> <key> <flags> <exptime> <bytes> <data block> |
參數說明如下:
<command name> |
set/add/replace |
<key> |
尋找關鍵字 |
<flags> |
客戶機使用它儲存關於索引值對的額外資訊 |
<exptime> |
該資料的存活時間,0表示永遠 |
<bytes> |
儲存位元組數 |
<data block> |
儲存的資料區塊(可直接理解為key-value結構中的value) |
1、添加
(1)、無論如何都儲存的set
這個set的命令在memcached中的使用頻率極高。set命令不但可以簡單添加,如果set的key已經存在,該命令可以更新該key所對應的原來的資料,也就是實現更新的作用。
可以通過“get 鍵名”的方式查看添加進去的記錄:
如你所知,我們也可以通過delete命令刪除掉,然後重新添加。
(2)、只有資料不存在時進行添加的add
(3)、只有資料存在時進行替換的replace
2、刪除
可以看到,刪除已存在的索引值和不存在的記錄可以返回不同的結果。
二、讀取命令1、get
get命令的key可以表示一個或者多個鍵,鍵之間以空格隔開
2、gets
可以看到,gets命令比普通的get命令多返回了一個數字(中為13)。這個數字可以檢查資料是否發生改變。當key對應的資料改變時,這個多返回的數字也會改變。
3、cas
cas即checked and set的意思,只有當最後一個參數和gets所擷取的參數匹配時才能儲存,否則返回“EXISTS”。
三、狀態命令1、stats
2、stats items
執行stats items,可以看到STAT items行,如果memcached儲存內容很多,那麼這裡也會列出很多的STAT items行。
3、stats cachedump slab_id limit_num
我們執行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的記錄。
4、其他stats命令
如stats slabs,stats sizes,stats reset等等使用也比較常見。
四、其他常見命令1、append
在現有的快取資料後添加快取資料,如現有緩衝的key不存在伺服器響應為NOT_STORED。
2、prepend
和append非常類似,但它的作用是在現有的快取資料前添加快取資料。
3、flush_all
該命令有一個可選的數字參數。它總是執行成功,伺服器會發送 “OK\r\n” 回應。它的效果是使已經存在的項目立即失效(預設),或在指定的時間後。此後執行取回命令,將不會有任何內容返回(除非重新儲存同樣的鍵名)。 flush_all 實際上沒有立即釋放項目所佔用的記憶體,而是在隨後陸續有新的項目被儲存時執行(這是由memcached的懶惰檢測和刪除機制決定的)。
flush_all 效果是它導致所有更新時間早於 flush_all 所設定時間的項目,在被執行取回命令時命令被忽略。
4、其他命令
memcached還有很多命令,比如對於儲存為數字型的可以通過incr/decr命令進行增減操作等等,這裡只列出開發和營運中經常使用的命令,其他的不再一一舉例說明。
補充一則:簡單認識.net framework中的幾種緩衝
web網站中緩衝的重要性毋庸置疑。我想很多asp.net開發人員在開發web應用系統的時候優先考慮使用的緩衝並不是第三方緩衝解決方案(比如分布式緩衝memcached、redis等等),而應該是.net framework已經提供的多種緩衝解決方案。下面結合自己的開發經驗談談對.net framework中緩衝的認識。
1、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。
2、Output Cache
眾所周知,輸出緩衝主要分網頁輸出快取和頁面部分緩衝。說白了,就是緩衝整個頁面的html或者部分html,本來沒什麼值得討論的,但是最近看到dudu的這篇部落格才恍然發現,想不到使用它還真是大有講究,我以前怎麼就沒有發現這個問題呢?看來發現問題和解決問題的能力同樣重要,有時候前者甚至更重要啊。
3、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