(1)memcached應用

(一)memcached介紹css

 (1) memcached是一個分佈式緩存工具。與咱們常常打交道的緩存技術,就是瀏覽器自帶的緩存,咱們知道像圖片、css、js等這些靜態文件就能被瀏覽器緩存起來。咱們再訪問相同網頁的時候,這些緩存的文件就直接找瀏覽器去取而再也不是請求服務器。減輕了服務器的壓力。數據庫

 (2) 所謂靜態文件,顧名思義就是一些不常常更新的文件;可是咱們網站的內容都是動態的,所謂動態,也就是這些數據都是存儲在數據庫當中,每次請求都要向數據庫索取。請求數據庫也是磁盤操做,也是費時費力的。雖然說是動態,但還有一些東西在短期內也是不會更改的,而這些數據徹底能夠緩存起來。像購物網站分類導航。memcached正充當着這樣一個角色。瀏覽器

 (3) memcached是分佈式的,也就是memcached服務端這個軟件能夠安裝到集羣服務器當中,抑或一臺服務器安裝好幾個memcached。這些memcached服務器是協同來處理用於請求的。所謂協同,就是每一個memcached都會分配一個權重,若是權重值較大被訪問到的概率也就大;若是權重值較小被訪問到的概率也就較小。緩存

 

(二)memcached服務端安裝服務器

(1) memcached服務端是用C語言來寫的。在官網上只給出了Linux的版本,好不容易在網上搜查到了Win32版本,連接發佈以下:socket

Win32_memcached服務端軟件下載分佈式

(2)將這個壓縮包解壓,就出來一個「鹿頭」的memcached.exe文件,沒錯!就是它了。運行它,會出現一個窗口,這個窗口一直打開着就說明memcached的服務端就一直運行着,那麼它就能接收客戶端的請求。客戶端就能夠自由發揮了,能夠用各類語言來實現,本文用Java做介紹。memcached

 在網上查了一下,如今比較流行的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 }
相關文章
相關標籤/搜索