日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

(1)memcached应用

發布時間:2023/12/31 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 (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应用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。