关于Redis数据库的java代码多线程读写性能问题,希望可以帮忙看

渣渣一枚、、由于项目关系,需要用到内存数据库来存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));                }            }        }    }}

在这个阳光明媚的三月,我从我单薄的青春里打马而过,

关于Redis数据库的java代码多线程读写性能问题,希望可以帮忙看

相关文章:

你感兴趣的文章:

标签云: