在現在這個高效率的社會中,怎樣將這個高效率應用到本身的程序中,是一個值得追尋和值得探討的問題。由於這個memcache可以很好的提升檢索速度,提高用戶體驗,並且重要的是減小數據庫的訪問。這就大大的提升了整個應用系統的檔次。所以,在應用程序的開發中加入這樣的一個技術無疑是給本身的程序錦上添花。瞬間就會顯得高大上,像如今不少的web應用,都將一些基礎信息直接放到遠程緩存系統中,並且該緩存中的key的有效時間也是能夠進行任意設定的。這就顯得更加人性化,用起來更加方便!好了,廢話很少說,實踐是檢驗真理的惟一標準。java
做者:itRed 郵箱:it_red@sina.com 博客:http://www.cnblogs.com/itred
一.關於Memcache:linux
我認爲在正式開始操做memcache以前仍是應該瞭解一下即將要操做的這個是什麼。Memcached基於一個存儲鍵/值對的hashmap。其守護進程是用C語言寫的,可是客戶端的應用操做上是能夠用任何語言編寫,並經過memcached協議與守護進程通訊。服務器端能夠是windows,也能夠是Linux。本博文將先介紹在windows下搭建和配置緩存服務器系統,在後面的博文中再進行介紹在linux中的安裝和配置。web
memcached是高性能的分佈式內存緩存服務器。至關於開闢一大塊兒內存用來存儲,通常的使用目的是,經過緩存數據庫查詢結果,減小數據庫訪問次數,以提升動態Web應用的速度、提升可擴展性。算法
Memcached的官網:http://memcached.org/ ,任何版本和一些操做api均可以從上面下載。數據庫
二.安裝服務器端:windows
>E: >cd memcached >cd memcached121 >memcached.exe –d install >memcached.exe –d start
安裝過程如圖示:api
4. 驗證安裝是否成功:緩存
待安裝完成後,須要驗證本身的memcache是否安裝成功,這個時候,打開windows的服務界面就能夠查看到安裝後的memcache是否在列表中,而且能夠看到該服務是否已經啓動。服務器
效果如圖:eclipse
5. 此時安裝已經完成,咱們能夠先在dos下體驗一下緩存服務器的做用。打開dos窗口,輸入如下命令:
>telnet 127.0.0.1 11211
注意這個的默認端口是11211
輸入完成,確認後會進入緩存服務器的界面,而後就 能夠用命令進行操做了。
基礎命令:
格式:<command name> <key> <flags> <exptime> <bytes> <data block>
解釋:
<command name> |
set/add/replace/get 等 |
<key> |
查找關鍵字 |
<flags> |
客戶機使用它存儲關於鍵值對的額外信息 |
<exptime> |
該數據的存活時間,0表示永遠 |
<bytes> |
存儲字節數 |
<data block> |
存儲的數據塊(可直接理解爲key-value結構中的value) |
圖示:
在緩存服務器上存儲username,有效時間是20s,當我在20秒時間內輸入get username 時,就會獲得最開始設置的那個itRed值。至關於就是key-value ====》username-itRed (鍵值對);可是,當username的有效期已通過了時,即超過20秒後,我再去取username的值時就會出現END,NULL空值。由於已經失效。以下圖所示:
6. 接下來須要作的事用java程序進行操做:
在myeclipse中新建一個java工程,導入jar包。如圖示:
貼出測試的源代碼,附上代碼註釋。運行後的測試結果徹底和在dos下操做同樣。測試方法,運行程序後,在dos中用get方法查看是否能拿到開始設置的值。
package com.red.memcached; import java.util.Date; import com.danga.MemCached.MemCachedClient; import com.danga.MemCached.SockIOPool; public class Cache { public static void main(String[] args) { MemCachedClient memcacheClient = new MemCachedClient(); String[] address = { "127.0.0.1:11211" };//緩存服務器列表 Integer[] weights = { 3 }; SockIOPool pool = SockIOPool.getInstance(); pool.setServers(address); pool.setWeights(weights); pool.setInitConn(5); pool.setMinConn(5); pool.setMaxConn(200); pool.setMaxIdle(1000 * 30 * 30); // 設置可用鏈接池的最長等待時間 pool.setMaintSleep(30); pool.setNagle(false); // 設置是否使用Nagle算法,由於咱們的通信數據量一般都比較大(相對TCP控制數據)並且要求響應及時,所以該值須要設置爲false(默認是true) pool.setSocketTO(30);// 設置socket的讀取等待超時值 pool.setSocketConnectTO(0); pool.initialize(); // 將數據放入緩存 memcacheClient.set("username", "Red"); // 將數據放入緩存,並設置失效時間 Date date = new Date(2000000); memcacheClient.set("user", "itRed", date); // 刪除緩存數據 // memcacheClient.delete("user"); // memcacheClient.delete("username"); // 獲取緩存數據 String str = (String) memcacheClient.get("username"); System.out.println(str); } }
這個案例只是用java語言實現,實際上是用memcached的客戶端能夠用任何語言進行實現,若是你看懂了這個程序,可是你不知道如何將這個緩存加入到你的程序中?其實這是很好辦的,只須要將這個demo放入工具包中,將這個demo做爲一個工具類,須要用的時候,只須要將這個調用這個方法就能夠了。很簡單,是吧!哈哈。在下一篇博文中就會介紹在linux環境下搭建一個和這個同樣的memcached緩存系統。兩種相比之下,其實我認爲第二種應該是目前不少公司都會採用的。
做者:itRed
郵箱:it_red@sina.com 博客:http://www.cnblogs.com/itred ***版權聲明:本文版權歸做者和博客園共有,歡迎轉載,但請在文章顯眼位置標明文章出處。未經本人書面贊成,將其做爲他用,本人保留追究責任的全部權利。