memcached配置和使用
? ? ? ? memcached作为著名的分布式内存对象缓存系统,具有高性能、免费和开源的特点,在互联网应用中大行其道,用于加快web动态应用程序的响应和减轻数据库的负荷。
? ? ? ? memcached的实现机制为K-V,类似Map容器机制。
Windows环境下载:
1. memcached的windows版本,地址在http://code.jellycan.com/memcached/,此例用的是memcached-1.2.6-win32-bin.zip。
2. 启动memcached服务
memcached.exe -d install
memcached.exe -d start?
3. java客户端:https://github.com/gwhalin/Memcached-Java-Client/downloads?
java_memcached-release_2.6.6.zip为java的连接客户端?
解压文件,将里面的jar包拷贝到项目的lib目录下。
Linux环境下载:
(1) 安装libevent
(apt-get install的:libevent好像没有被认出来)
下载? http://www.monkey.org/~provos/libevent-2.0.12-stable.tar.gz
libevent-2.0.12-stable$configure
libevent-2.0.12-stable$make
libevent-2.0.12-stable$sudo make install
(2)安装memcached
下载安装memcached1.4.5????
http://memcached.googlecode.com/files/memcached-1.4.5.tar.gz
memcached-1.4.5$./configure
memcached-1.4.5$make
memcached-1.4.5$sudo make install
如果启动失败,找不到libevent,则连接一下
/usr/lib$ sudo ln -s /usr/local/lib/libevent-2.0.so.5 libevent-2.0.so.5
(3)启动
$ memcached
?
** * Description 缓存中要保存的对象,必须将对象序列化才能保存 * @author Administrator * 2012-10-16 */class User implements Serializable{/** * */private static final long serialVersionUID = -7969334018970422840L;public String userName;public String password;}public class MemcachedTest {static{// 服务器的地址,此处写的同一个地址,实际应为不同String[] servers = {"127.0.0.1:11211", "127.0.0.1:11211"}; //创建一个连接池 SockIOPool pool = SockIOPool.getInstance(); //设置缓存服务器 pool.setServers(servers); //设置初始化连接数,最小连接数,最大连接数以及最大处理时间 pool.setInitConn(50); pool.setMinConn(50); pool.setMaxConn(500); pool.setMaxIdle(1000 * 60 * 60); //设置主线程睡眠时间,每3秒苏醒一次,维持连接池大小 //maintSleep 千万不要设置成30,访问量一大就出问题,单位是毫秒,推荐30000毫秒。 pool.setMaintSleep(3000); //关闭套接字缓存 pool.setNagle(false); //连接建立后的超时时间 pool.setSocketTO(3000); //连接建立时的超时时间 pool.setSocketConnectTO(0); //初始化连接池 pool.initialize(); }public static void main(String[] args) throws IOException {MemCachedClient c = new MemCachedClient();//存取一个简单的Integer// Store a value (async) for one hourc.set("someKey", new Integer(4), 3600);// Retrieve a value (synchronously).Object myObject = c.get("someKey");Integer result = (Integer) myObject;System.out.println(result);//存取一个序列化的对象System.out.println("存之前的时间:" + System.currentTimeMillis());User user1 = new User();user1.userName = "ZhangSan";user1.password = "alongpasswordhere";c.set("user1", user1, 3600);System.out.println("取之前的时间:" + System.currentTimeMillis());User myUser1 = (User)(c.get("user1"));System.out.println(myUser1.userName + " " + myUser1.password);System.out.println("取之后的时间:" + System.currentTimeMillis());}}