分分鍾學會使用memcached


1、首先要搭建服務端的程序。

下載地址:http://pan.baidu.com/s/1hrJ9jE0 密碼:spqc

將對應版本的文件夾,放到D盤,任意位置即可

桌面-程序-運行-cmd-打開命令行:

D:

進入D盤

cd memcache(文件夾名,你起的啥就敲啥)

memcached -d install

如果執行不成功,拋了個異常,則需要進入C:\Windows\System32\cmd.exe

選中后,以管理員權限去運行即可。

 

2、下載客戶端使用的jar文件,因為在maven庫里搜了好久都沒有搜到相關的jar文件,所以就將jar文件放到自己本地的maven庫中,然后使用項目引用。

下載你要使用版本的memcached。下載memcached client

3、將里面的   java_memcached-release_2.6.6.jar 這個文件 放在d盤(你看哪邊爽 放在哪邊)

4、cmd 進入命令;進入D:盤,輸入如下命

 D:\>mvn install:install-file -Dfile=d:/java_memcached-release_2.6.6.jar -DgroupId=com.danga -DartifactId=memcached -Dversion=2.6.6 -Dpackaging=jar -DgeneratePom=true

5、項目中使用maven引用文件

 

<dependency>
   <groupId>com.danga</groupId>
   <artifactId>memcached</artifactId>
   <version>2.6.6</version>
  </dependency>
  

6、memcached的使用

package cfs.wsdl.cache;
import java.io.Serializable;

import com.danga.MemCached.MemCachedClient;
import com.danga.MemCached.SockIOPool;
public class test {
    public static void main(String[] args) {
        String[] servers = { "192.168.1.126:11211" };  //配置服務端的地址,看好這是個數組,也意味着多個服務端地址直接扔到數組里即可
        //得到一個鏈接池對象並進行一些初始化工作
        SockIOPool pool = SockIOPool.getInstance();
        pool.setServers(servers);//設置服務端
        pool.setFailover(true);     //大概意思是為false如果連接管道失敗了直接返回就不會再去找其他機器了,為true會組裝一些新的key到剩下的服務器里去找。
        pool.setInitConn(10);     //初始化時對每個服務器建立的連接數目
        pool.setMinConn(5);         //每個服務器建立最小的連接數,當自查線程發現與某個服務器建立連接數目小於這個數目時會彌補剩下的連接
        pool.setMaxConn(250);     //每個服務器建立最大的連接數
        //pool.setMaintSleep( 30 );//自查線程周期進行工作,其每次休眠時間
        pool.setNagle(false);     //Socket的參數,如果是true在寫數據時不緩沖,立即發送出去 
        pool.setSocketTO(3000);  //Socket阻塞讀取數據的超時時間 
        pool.setAliveCheck(true);//為true會檢查Socket是否已經連接
        pool.initialize();         //初始化完畢
        //得到具體的客戶端操作對象
        MemCachedClient mcc =new MemCachedClient();
        //插入數據3中方式
        mcc.set("test1", "測試1");//第一種,這種方式如果key已存在則直接覆蓋重寫了
        mcc.add("test2", "測試2");//第二種,這種方式只會添加,如果key已存在則返回false,添加不成功
        mcc.replace("test3", "測試3");//顧名思義,同第一種差不多。
        //如果想要存實體類,必須要將實體類序列化。讓實體類 去  implements Serializable  這個接口
        //如果想要存泛型集合,同理,對應的泛型也必須要序列化。
        //獲取數據
        mcc.get("test1");//獲取到的數據別忘啦轉型哦
        //刪除數據
        mcc.delete("test1");
        //清空數據
        mcc.flushAll();//執行了此方法,所有緩存的數據都置空了,再獲取則為null
        
    }
}
 //獲取所有的key
    public static List<String> getAllKeys() {  
        MemCachedClient memCachedClient= MemcachedUtil.getMcu().getMcc();
        List<String> list = new ArrayList<String>();  
        Map<String, Map<String, String>> items = memCachedClient.statsItems();  
        for (Iterator<String> itemIt = items.keySet().iterator(); itemIt.hasNext();) {  
            String itemKey = itemIt.next();  
            Map<String, String> maps = items.get(itemKey);  
            for (Iterator<String> mapsIt = maps.keySet().iterator(); mapsIt.hasNext();) {  
                String mapsKey = mapsIt.next();  
                   String mapsValue = maps.get(mapsKey);  
                   if (mapsKey.endsWith("number")) {  //memcached key 類型  item_str:integer:number_str  
                    String[] arr = mapsKey.split(":");  
                       int slabNumber = Integer.valueOf(arr[1].trim());  
                       int limit = Integer.valueOf(mapsValue.trim());  
                       Map<String, Map<String, String>> dumpMaps = memCachedClient.statsCacheDump(slabNumber, limit);  
                       for (Iterator<String> dumpIt = dumpMaps.keySet().iterator(); dumpIt.hasNext();) {  
                           String dumpKey = dumpIt.next();  
                           Map<String, String> allMap = dumpMaps.get(dumpKey);  
                           for (Iterator<String> allIt = allMap.keySet().iterator(); allIt.hasNext();) {  
                               String allKey = allIt.next();  
                               list.add(allKey.trim());  
      
                           }  
                       }  
                   }  
            }  
        }  
        return list; 
    }
獲取所有的key

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM