redis与memcached性能测试

写了个测试程序,测试redis和memcached的一些性能,Redis的客户端我用的是Jedis,memcached的客户端用的是memcached-cient ,测试程序很简单,主要是想看看在读写一定数量的数据时两个框架所表现出来的性能如何。代码如下:

redis
package com.ht;

import redis.clients.jedis.Jedis;

public class JedisTest {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		String serverIp = "192.168.83.1";
		
		int port = 6379;
		
		Jedis jedis = new Jedis(serverIp, port);
		
		jedis.connect();
		int num = 1000;
		long t1 = System.currentTimeMillis();
		for(int i=0;i<num;i++){
			jedis.set(""+i, "hello "+i);
		}
		
		long t2 = System.currentTimeMillis();
		
		System.out.println("使用Redis set "+num+"条记录所花的时间:"+(t2-t1)+" ms");
		
		for(int i=0;i<num;i++){
			jedis.get(""+i);
		}
		
		long t3 = System.currentTimeMillis();
		
		System.out.println("使用 Redis get "+num+"条记录所花的时间:"+(t3-t2)+" ms");
	}

}



memcached:


package com.ht;

import com.alisoft.xplatform.asf.cache.memcached.client.MemCachedClient;
import com.alisoft.xplatform.asf.cache.memcached.client.SockIOPool;

public class TestMemcached {

	public static void main(String[] args) {
		String[] server = {"192.168.83.1:12345"};
		//初始化SockIOPool,管理memcached连接池
		SockIOPool pool = SockIOPool.getInstance();
		pool.setServers(server);
		
		pool.setFailover(true);
		
		pool.setInitConn(10);
		
		pool.setMinConn(5);
		
		pool.setMaxConn(100);
		
		pool.setMaintSleep(30);
		
		
		pool.setNagle(false);
		
		pool.setSocketTO(3000);
		
		pool.setAliveCheck(true);
		
		pool.initialize();
		
		//建立memcachedclient 对象
		MemCachedClient client = new MemCachedClient();
		
		int num =1000;
		long t1 = System.currentTimeMillis();
		for(int i=0;i<num;i++){
			client.set(""+i, "hello "+i);
		}
		long t2 = System.currentTimeMillis();
		System.out.println("使用Memcached set "+num+"条记录所花的时间:"+(t2-t1)+" ms");
		for(int i=0;i<num;i++){
			client.get(""+i);
		}
		long t3 = System.currentTimeMillis();
		
		System.out.println("使用Memcached get "+num+"条记录所花的时间:"+(t3-t2)+" ms");
		
		//		for(int i=0;i<100;i++){
//			  /*将对象加入到memcached缓存*/  
//		  boolean success = client.set("" + i, "Hello!");  
//			  /*从memcached缓存中按key值取对象*/  
//			           String result = (String) client.get("" + i);  
//			           System.out.println(String.format("set( %d ): %s", i, success));  
//			            System.out.println(String.format("get( %d ): %s", i, result));  
//
//		}
//		
//		for(int i=0;i<10;i++){
//			client.delete(""+i);
//		}
		
	}
}




测试结果如下:

100000条数据

Redis:
使用Redis set 100000条记录所花的时间:31663 ms
使用 Redis get 100000条记录所花的时间:31518 ms

Memcached:

使用Memcached set 100000条记录所花的时间:23847 ms
使用Memcached get 100000条记录所花的时间:23080 ms

10000条数据

使用Redis set 10000条记录所花的时间:3354 ms
使用 Redis get 10000条记录所花的时间:3308 ms

memcached:
使用Memcached set 10000条记录所花的时间:2466 ms
使用Memcached get 10000条记录所花的时间:2366 ms



1000条数据:

使用Redis set 1000条记录所花的时间:415 ms
使用 Redis get 1000条记录所花的时间:356 ms

使用Memcached set 1000条记录所花的时间:376 ms
使用Memcached get 1000条记录所花的时间:291 ms


从测试结果来看memcached的读写性能在一定程序上确实要优于redis,当然,这也是预料之中的,memcached的所有数据都缓存在内存中,redis的数据也是存储在内存中,同时也会异步的存储在本地磁盘中。

猜你喜欢

转载自huangzixun.iteye.com/blog/1846057