(1)memcached应用
(一)memcached介紹
?(1) memcached是一個分布式緩存工具。與我們經常打交道的緩存技術,就是瀏覽器自帶的緩存,我們知道像圖片、css、js等這些靜態文件就能被瀏覽器緩存起來。我們再訪問相同網頁的時候,這些緩存的文件就直接找瀏覽器去取而不再是請求服務器。減輕了服務器的壓力。
?(2) 所謂靜態文件,顧名思義就是一些不經常更新的文件;但是我們網站的內容都是動態的,所謂動態,也就是這些數據都是存儲在數據庫當中,每次請求都要向數據庫索取。請求數據庫也是磁盤操作,也是費時費力的。雖說是動態,但還有一些東西在短時間內也是不會更改的,而這些數據完全可以緩存起來。像購物網站分類導航。memcached正充當著這樣一個角色。
?(3) memcached是分布式的,也就是memcached服務端這個軟件可以安裝到集群服務器當中,抑或一臺服務器安裝好幾個memcached。這些memcached服務器是協同來處理用于請求的。所謂協同,就是每個memcached都會分配一個權重,如果權重值較大被訪問到的幾率也就大;如果權重值較小被訪問到的幾率也就較小。
?
(二)memcached服務端安裝
(1) memcached服務端是用C語言來寫的。在官網上只給出了Linux的版本,好不容易在網上搜查到了Win32版本,鏈接發布如下:
Win32_memcached服務端軟件下載
(2)將這個壓縮包解壓,就出來一個“鹿頭”的memcached.exe文件,沒錯!就是它了。運行它,會出現一個窗口,這個窗口一直打開著就說明memcached的服務端就一直運行著,那么它就能接收客戶端的請求。客戶端就可以自由發揮了,可以用各種語言來實現,本文用Java作介紹。
?在網上查了一下,現在比較流行的Java客戶端一個是阿里的同學寫的;另一個就是老外寫的,順便在Git上將其下載下來看了一下源碼。源碼后面將介紹,現在只說應用。
?這里只介紹這個老外寫的Memcached Java客戶端,我們需要下載memcached客戶端Jar包和其所依賴的Jar包.
?
(三)創建工程
(1)現在我們就可以開始我們的項目了。建一個Memecached類,在其中提供向緩存當中存入數據和取數據的方法。(memcached服務端軟件默認運行端口為:11211)
1 public class MemCached{ 2 private static MemCachedClient mcc=new MemCachedClient(); 3 private static MemCached memCached=new MemCached(); 4 5 //服務區群 6 private static final String[] services={"192.168.56.1:11211"}; 7 //服務器群各自對應的權重 8 private static final Integer[] weights={1}; 9 //初始化連接數 10 private static final Integer init_connection=5; 11 //最大連接數 12 private static final Integer max_connection=50; 13 //最大空閑時間 60*60*6 14 private static final Long max_idle=21600L; 15 16 17 static { 18 //獲取socket連接池的實例對象 19 SockIOPool pool=SockIOPool.getInstance(); 20 pool.setServers(services); 21 pool.setWeights(weights); 22 pool.setInitConn(init_connection); 23 pool.setMinConn(init_connection); 24 pool.setMaxConn(max_connection); 25 pool.setMaxIdle(max_idle); 26 27 //設置TCP的參數,連接超時等 28 pool.setNagle(false); 29 pool.setSocketTO(3000); 30 pool.setSocketConnectTO(0); 31 32 //初始化連接池 33 pool.initialize(); 34 35 //超過指定大小就壓縮 36 mcc.setCompressEnable(true); 37 mcc.setCompressThreshold(65536L); 38 } 39 40 private MemCached(){} 41 42 public static MemCached getInstance() { 43 return memCached; 44 } 45 46 public boolean add(String key,Object value) { 47 return mcc.add(key, value); 48 } 49 50 public boolean add(String key,Object value,Date expiry) { 51 return mcc.add(key,value, expiry); 52 } 53 54 public boolean replace(String key,Object value) { 55 return mcc.replace(key, value); 56 } 57 public boolean replace(String key,Object value,Date expiry) { 58 return mcc.replace(key,key,expiry); 59 } 60 61 public Object get(String key) { 62 return mcc.get(key); 63 } 64(2)測試方法
1 public class Test { 2 public static void main(String[] args) { 3 MemCached cache=MemCached.getInstance(); 4 cache.add("username", "feiji"); 5 System.out.println("從緩存中取出的值為:"+cache.get("username")); 6 } 7 8 }這樣我們就能將鍵為“username”,值為“feiji”的鍵值對存入到緩存當中又能從其中取出來。
然后我們將第4行代碼刪掉,只要memcached服務端沒有關閉,還是能查詢出來。
當然我們還可以為這個存入的鍵值對加入過期時間。
這就好比一個應用場景,手機短信驗證碼。程序將驗證碼發給指定手機,這個驗證碼假設是在50S內有效。那么這個驗證碼在這50S內顯然要能找到,肯定不能用數據庫來存吧!!這時memcached就派上用場了。
測試代碼如下:
1 public class Test { 2 public static void main(String[] args) { 3 MemCached cache=MemCached.getInstance(); 4 long now=System.currentTimeMillis(); 5 long expiry=now+1000*50; 6 Date date=new Date(expiry); 7 cache.add("username", "feiji", date); 8 System.out.println("從緩存中取出的值為:"+cache.get("username")); 9 } 10 }?
轉載于:https://www.cnblogs.com/feijishuo/p/4049136.html
總結
以上是生活随笔為你收集整理的(1)memcached应用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: AGM PAD P1 三防安卓平板即将推
- 下一篇: 巨人网络与阿里云达成合作 共同打造&ld