Java+Memcached测试

介绍


memcached
免费和开源,高性能,分布式的内存对象缓存系统,通用性,可用于加速动态Web应用程序,减轻数据库负载。
memcached是一个在任意的数据块存储键值存储(字符串,对象)从数据库调用,API调用结果,或页面 渲染。

memcached是简单但功能强大的。其简单的设计促进快速部署,易于开发,并解决了许多问题,面临巨大的数据高速缓存。它的API是最流行的语言。

下载:http://memcached.org/downloads



安装

memcached-1.2.6-win32-bin

 

安装目录命令行:
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
退出登录

 

Memcached-Java-Client

 下载地址:https://github.com/gwhalin/Memcached-Java-Client

测试类:

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 + "]";
	}   
	 
}

注意: 如果java程序和memcache不在一个服务器,那么注意时间同步问题。我这里就是一直访问不到设置短期的数据,后来发现两个服务器时间没有同步

            存的类需要序列化实现Serializable接口


         下载的源代码里有个不错的多线程多服务器的测试demo可以看一下:com.meetup.memcached.test.TestMemcached




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

dingsai88

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值