渣渣一枚、、由于项目关系,需要用到内存数据库来存key-value所以就开始研究redis这个数据库。现在已经把redis放在了CentOS的测试服务器上,然后通过网上的资料写了链接代码!测试用了100个线程,每个线程插入10000条数据,结果竟然花了**200s**,
同事用memcached测试同样的数据只要了**20s**而在linux中用redis自带的redis-benchmark查询性能结果如下:
====== PING_INLINE ====== 100000 requests completed in 0.72 seconds 50 parallel clients 3 bytes payload keep alive: 1100.00% <= 0 milliseconds139082.06 requests per second====== PING_BULK ====== 100000 requests completed in 0.73 seconds 50 parallel clients 3 bytes payload keep alive: 1100.00% <= 0 milliseconds136798.91 requests per second====== SET ====== 100000 requests completed in 0.72 seconds 50 parallel clients 3 bytes payload keep alive: 1100.00% <= 0 milliseconds139275.77 requests per second====== GET ====== 100000 requests completed in 0.73 seconds 50 parallel clients 3 bytes payload keep alive: 1100.00% <= 0 milliseconds137931.03 requests per second====== INCR ====== 100000 requests completed in 0.71 seconds 50 parallel clients 3 bytes payload keep alive: 1100.00% <= 0 milliseconds141643.06 requests per second====== LPUSH ====== 100000 requests completed in 0.71 seconds 50 parallel clients 3 bytes payload keep alive: 1100.00% <= 0 milliseconds141442.72 requests per second====== LPOP ====== 100000 requests completed in 0.72 seconds 50 parallel clients 3 bytes payload keep alive: 1100.00% <= 0 milliseconds139664.80 requests per second====== SADD ====== 100000 requests completed in 0.71 seconds 50 parallel clients 3 bytes payload keep alive: 1100.00% <= 0 milliseconds140845.08 requests per second====== SPOP ====== 100000 requests completed in 0.71 seconds 50 parallel clients 3 bytes payload keep alive: 1100.00% <= 0 milliseconds140252.45 requests per second====== LPUSH (needed to benchmark LRANGE) ====== 100000 requests completed in 0.71 seconds 50 parallel clients 3 bytes payload keep alive: 1100.00% <= 0 milliseconds141043.72 requests per second====== LRANGE_100 (first 100 elements) ====== 100000 requests completed in 1.77 seconds 50 parallel clients 3 bytes payload keep alive: 1100.00% <= 0 milliseconds56433.41 requests per second====== LRANGE_300 (first 300 elements) ====== 100000 requests completed in 4.78 seconds 50 parallel clients 3 bytes payload keep alive: 11.20% <= 1 milliseconds99.60% <= 2 milliseconds99.93% <= 3 milliseconds100.00% <= 3 milliseconds20938.02 requests per second====== LRANGE_500 (first 450 elements) ====== 100000 requests completed in 6.78 seconds 50 parallel clients 3 bytes payload keep alive: 10.02% <= 1 milliseconds99.75% <= 2 milliseconds99.96% <= 3 milliseconds99.99% <= 4 milliseconds100.00% <= 4 milliseconds14749.26 requests per second====== LRANGE_600 (first 600 elements) ====== 100000 requests completed in 8.76 seconds 50 parallel clients 3 bytes payload keep alive: 10.02% <= 1 milliseconds7.64% <= 2 milliseconds99.67% <= 3 milliseconds99.75% <= 4 milliseconds99.83% <= 5 milliseconds99.90% <= 6 milliseconds99.96% <= 7 milliseconds100.00% <= 8 milliseconds100.00% <= 8 milliseconds11416.83 requests per second====== MSET (10 keys) ====== 100000 requests completed in 1.13 seconds 50 parallel clients 3 bytes payload keep alive: 199.98% <= 1 milliseconds100.00% <= 1 milliseconds88573.96 requests per second
显示出来的set、get什么的都是10W/S的请求,所以我的代码应该有问题,不然也不会出现200S的结果,应该是在多线程哪里出了问题,希望可以帮我看看、、
新人、、木有C币,希望大家帮我看看!
public class RedisClient { private Jedis jedis;//非切片额客户端连接 private JedisPool jedisPool;//非切片连接池 private ShardedJedis shardedJedis;//切片额客户端连接 private ShardedJedisPool shardedJedisPool;//切片连接池 private static long START_TIME; private static int TOTAL_COUNT =100; private static int END_COUNT; private static final int COUNT = 10000; public RedisClient() { initialPool(); initialShardedPool(); shardedJedis = shardedJedisPool.getResource(); jedis = jedisPool.getResource(); } /** * 初始化非切片池(非分布式) */ private void initialPool() { // 池基本配置 JedisPoolConfig config = new JedisPoolConfig(); config.setMaxTotal(128); config.setMinIdle(10); config.setMaxIdle(128); config.setMaxWaitMillis(30000l); config.setTestOnBorrow(false); jedisPool = new JedisPool(config, "192.168.1.110", 6379, 0); } /** * 初始化切片池(分布池) */ private void initialShardedPool() { // 池基本配置 JedisPoolConfig config = new JedisPoolConfig(); config.setMaxTotal(128); config.setMinIdle(10); config.setMaxIdle(128); config.setMaxWaitMillis(30000l); config.setTestOnBorrow(false); // slave链接 List<JedisShardInfo> shards = new ArrayList<JedisShardInfo>(); shards.add(new JedisShardInfo("192.168.1.110", 6379, 0)); // 构造池 shardedJedisPool = new ShardedJedisPool(config, shards); } public void show() { HashOperate(); } private void HashOperate() { System.out.println("======================hash=========================="); //清空数据 System.out.println(jedis.flushDB()); System.out.println("=============增============="); Thread[] threads = new Thread[TOTAL_COUNT]; for (int i = 0; i < TOTAL_COUNT; i++) { threads[i] = new TTestThread(i * COUNT, COUNT); } START_TIME = System.currentTimeMillis(); for (int i = 0; i < TOTAL_COUNT; ++i) { threads[i].start(); } } private class TTestThread extends Thread { private int mOffset; private int mCount; private Transaction tx; public TTestThread(int offset, int count) { mOffset = offset; mCount = count; } @Override public void run() { super.run(); ShardedJedis shardedJedis = shardedJedisPool.getResource(); try { for (int i = mOffset; i < mCount + mOffset; ++i) { shardedJedis.hset("hashs", "key" + i, String.valueOf(i)); } } finally { shardedJedisPool.returnResource(shardedJedis); } synchronized (TTestThread.class) { ++END_COUNT; if (END_COUNT == TOTAL_COUNT) { System.out.println("time is " + (System.currentTimeMillis() - START_TIME)); } } } }}
在这个阳光明媚的三月,我从我单薄的青春里打马而过,