memcache初探

  一、概念:memcached:一个高性能的分布式的内存对象缓存系统,用来分担数据库的压力,通过在内存里维护一个统一的巨大的hash表,能够用来存储各种格式的数据,包括图像、视频、文件及数据库检索的结果等,简单的说就是将数据调到内存中,然后从内存中读取,从而大大提高读取速度。

    memcached是以key-value的方式进行数据存储的,key《=250个字符,value<=1M,memcached默认过期时间是30days。

  二、Windows下安装:

  1、将下载的压缩包解压到某个目录下。

  2、输入cmd,打开命令行窗口,转到刚才解压的目录下。

  3、输入memcached.exe -d install进行安装(如果提示failed to install or...,解决办法是在C:/Windows/system32目录下找到cmd.exe文件,右击以管理员身份运行便可)

  4、安装完后输入memcached -d start启动服务,便可在任务管理器的服务窗口看到memcached。

  

三、memcached启动参数描述:

-d :启动一个守护进程,

-m:分配给Memcache使用的内存数量,单位是MB,默认是64MB,

-u :运行Memcache的用户

-l  :监听的服务器IP地址

-p :设置Memcache监听的端口,默认是11211    注:-p(p为小写)

-c :设置最大并发连接数,默认是1024

-P :设置保存Memcache的pid文件   注:-P(P为大写)

如果要结束Memcache进程,执行:kill cat pid文件路径

 

四:java操作memecached具体步骤如下:

  1、首先引用4个jar包:

    commons-pool-1.5.6.jar

    java_memcached-release_2.6.6.jar

    slf4j-api-1.6.1.jar

    slf4j-simple-1.6.1.jar

  2、操作代码如下:

    

 1 import com.danga.MemCached.MemCachedClient;
 2 import com.danga.MemCached.SockIOPool;
 3 import com.keytec.bean.User;
 4 
 5 public class MemcachedTest {
 6 
 7     protected static MemCachedClient mcc = new MemCachedClient();
 8     protected static MemcachedTest mt = new MemcachedTest();
 9     //设置与缓存服务器的连接池
10     static{
11         //服务器列表及其权重
12         String[] servers = {"127.0.0.1:11211"};
13         Integer[] weights = {3};
14         
15         //获取socket连接池的实例对象
16         SockIOPool pool = SockIOPool.getInstance();
17         
18         //设置服务器信息
19         pool.setServers(servers);
20         pool.setWeights(weights);
21         
22         //设置初始连接数、最小和最大连接数及最大处理时间
23         pool.setInitConn(5);
24         pool.setMinConn(5);
25         pool.setMaxConn(250);
26         pool.setMaxIdle(1000 * 60 * 60 * 6);
27         
28         //设置主线程的睡眠时间
29         pool.setMaintSleep(30);
30         
31         //设置TCP的参数,连接超时等
32         pool.setNagle(false);
33         pool.setSocketTO(3000);
34         pool.setSocketConnectTO(0);
35         
36         //初始化连接池
37         pool.initialize();
38         
39         //压缩设置,超过指定大小(单位为K)的数据都会被压缩
40 //        mcc.setCompressEnable(true);
41 //        mcc.setCompressThreshold(64 * 1024);
42     }
43     
44     protected MemcachedTest(){}
45     
46     public static MemcachedTest getInstance(){
47         return mt;
48     }
49     
50     //添加指定的值到缓存中
51     public boolean add(String key,Object value){
52         return mcc.add(key, value);
53     }
54     
55     public boolean add(String key,Object value,Date expiry){
56         return mcc.add(key, value, expiry);
57     }
58     
59     public boolean replace(String key,Object value){
60         return mcc.replace(key, value);
61     }
62     
63     public boolean replace(String key,Object value,Date expiry){
64         return mcc.replace(key, value, expiry);
65     }
66     
67     public Object get(String key){
68         return mcc.get(key);
69     }
70     
71     public static void main(String[] args) {
72         MemcachedTest memCache = MemcachedTest.getInstance();
73         memCache.add("hello", 123);
74         System.err.println("get value from cache:" + memCache.get("hello"));
75         User user = new User();
76         user.setUserName("zhangli");
77         user.setPassword("123");
78         memCache.add("user", user);
79         User cuser = (User)memCache.get("user");
80         System.err.println("cached user:" + cuser.getUserName());
81         cuser.setUserName("cuihongwei");
82         cuser = (User)memCache.get("user");
83         System.err.println("cached user:" + cuser.getUserName());
84         memCache.replace("user", cuser);
85         cuser = (User)memCache.get("user");
86         System.err.println("cached user:" + cuser.getUserName());
87     }
88 
89 }

注:存放的对象必须被实例化。

posted @ 2014-04-03 11:47  风儿飞  阅读(728)  评论(0编辑  收藏  举报