memcached是简单但功能强大的。其简单的设计促进快速部署,易于开发,并解决了许多问题,面临巨大的数据高速缓存。它的API是最流行的语言。
下载:http://memcached.org/downloads
安装目录命令行: memcached -d install 卸载: memcached -d uninstall 启动 启动1.界面启动服务(memcached Server) 启动2:控制台下 : memcached -d start 需要的内存大于64m启动:memcached -m 256m -d stat Lest Recently Used(LRU)大于内存时自己删除不用的 检查: 默认端口11211 netstat -anb 查看端口和占用程序 使用方法登录: telnet localhost 11211
ADD key 标志 时间 字节数 如果已存在就不能保存 add name 0 60 5[add指令;name是key(key/value);0是标志;60表示存放时间60s ; 5表示放入多大字节] ADD key 标志 时间 字节数 value必须和字节数大小一样不然报:CLIENT_ERROR bad data chunk GET [key] name 例: add name 0 60 5 hello STORED get name VALUE name 0 5 hello END SET key 标志 时间 字节数 更新key不存在就插入,存在就更新 get age VALUE age 0 3 100 END set age 0 60 3 123 STORED get age VALUE age 0 3 123 END DELETE key 删除key delete age3 DELETED get age3 END REPLACE key 标志 时间 字节数 replace test 0 5 3 --替换test的定义 替换key之前的定义 add test 0 500 3 100 STORED replace test 0 5 3 120 STORED get test VALUE test 0 3 120 END get test END APPEND key 标志 时间 字节数 append name 0 60 3--在字符串后追加 add name 0 60 5 hello STORED append name 0 60 3 abc STORED get name VALUE name 0 8 helloabc END INCR key 加值 incr count 1 增加数值 get count VALUE count 0 2 10 END incr count 1 11 get count VALUE count 0 2 11 END DECR key 减值 decr key 1 get count VALUE count 0 2 11 END decr count 1 10 get count VALUE count 0 2 10 END flush_all 全删 flush_all 50 50秒以内到期的全删掉 stats 查看状态 STAT pid 22459 进程ID STAT uptime 1027046 服务器运行秒数 STAT time 1273043062 服务器当前unix时间戳 STAT version 1.4.4 服务器版本 STAT pointer_size 64 操作系统字大小(这台服务器是64位的) STAT rusage_user 0.040000 进程累计用户时间 STAT rusage_system 0.260000 进程累计系统时间 STAT curr_connections 10 当前打开连接数 STAT total_connections 82 曾打开的连接总数 STAT connection_structures 13 服务器分配的连接结构数 STAT cmd_get 54 执行get命令总数 STAT cmd_set 34 执行set命令总数 STAT cmd_flush 3 指向flush_all命令总数 STAT get_hits 9 get命中次数 STAT get_misses 45 get未命中次数 STAT delete_misses 5 delete未命中次数 STAT delete_hits 1 delete命中次数 STAT incr_misses 0 incr未命中次数 STAT incr_hits 0 incr命中次数 STAT decr_misses 0 decr未命中次数 STAT decr_hits 0 decr命中次数 STAT cas_misses 0 cas未命中次数 STAT cas_hits 0 cas命中次数 STAT cas_badval 0 使用擦拭次数 STAT auth_cmds 0 STAT auth_errors 0 STAT bytes_read 15785 读取字节总数 STAT bytes_written 15222 写入字节总数 STAT limit_maxbytes 1048576 分配的内存数(字节) STAT accepting_conns 1 目前接受的链接数 STAT listen_disabled_num 0 STAT threads 4 线程数 STAT conn_yields 0 STAT bytes 0 存储item字节数 STAT curr_items 0 item个数 STAT total_items 34 item总数 STAT evictions 0 为获取空间删除item的总数 version 查看版本 quit 退出登录
package junit.memcache; import java.util.Date; import com.meetup.memcached.MemcachedClient; import com.meetup.memcached.SockIOPool; /** * * @author Daniel memcache测试 */ public class SimpleMemcacheDB { protected static MemcachedClient cache = new MemcachedClient(); protected static SockIOPool pool = null; /** * 配置数据源 */ static { // memcache集 String[] servers = { "192.168.1.33:11211" }; Integer[] weights = { 5, 4, 2 };// memcache权重 pool = SockIOPool.getInstance(); pool.setServers(servers); pool.setWeights(weights); pool.setInitConn(5); pool.setMinConn(5); pool.setMaxConn(50); pool.setMaintSleep(30); pool.setNagle(false); pool.initialize(); System.out.println("初始化完成"); } /** * 测试方法:测试string和object类型 */ public void test() throws Exception{ // 清空所有数据,谨慎使用 cache.flushAll(); // 对象测试 // 保存 object 类型,类必须实现Serializable接口 for (int i = 1; i < 10; i++) { // 过期时间10s cache.set("obj" + i, new User(i + ""), new Date(10000)); } for (int i = 1; i < 2; i++) { User myObject = (User) cache.get("obj" + i); System.out.println("Get object from mem :" + myObject); } // 字符串和过期测试 // 过期时间1s cache.set("testKey", "This is a test String", new Date(1000)); System.out.println("get String:"+cache.get("testKey")); //sleep 2.5s Thread.sleep(2500); System.out.println("get String过期后:"+cache.get("testKey")); //3600s cache.set("TestReplace", "TestReplaceValue",new Date(3600000)); System.out.println(cache.get("TestReplace")); //修改过期时间 cache.replace("TestReplace","TestReplaceValue",new Date(2000)); //sleep 2.5s Thread.sleep(2500); System.out.println("修改后不能获得:"+cache.get("TestReplace")); } }
User.java
package junit.memcache; import java.io.Serializable; public class User implements Serializable{ /** * */ private static final long serialVersionUID = 1L; String userId; public User(String userId) { super(); this.userId = userId; } public String getUserId() { return userId; } public void setUserId(String userId) { this.userId = userId; } @Override public String toString() { return "User [userId=" + userId + "]"; } }
存的类需要序列化实现Serializable接口
下载的源代码里有个不错的多线程多服务器的测试demo可以看一下:com.meetup.memcached.test.TestMemcached