package com.github.fangzy.redis;

import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.util.StopWatch;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;

import java.util.Set;

/**
 * Created on 2014/10/30.
 *
 * @author FZY
 */
public class ShardedJedisTest extends AbstractTests {
    private static final Logger LOGGER = LoggerFactory.getLogger(ShardedJedisTest.class);

    @Autowired
    private ShardedJedisInterface shardedJedisDemo;

    @Autowired
    private JedisServiceDemo demo;

    private String key = "test:shardedJedis";

    private int times = 100000;

    @Autowired
    @Qualifier("default")
    private JedisPool jedisPool;

    @Autowired
    @Qualifier("test")
    private JedisPool jedisPool6380;

    @Test
    public void shardedPiplineTest() {
        StopWatch stopWatch = new StopWatch("jedis pipeline benchmark");

        stopWatch.start("jedis proxy pipeline");
        demo.incr(key, times);
        stopWatch.stop();

        stopWatch.start("shardedJedis proxy pipeline");
        shardedJedisDemo.incr(key, times);
        stopWatch.stop();

        LOGGER.info(stopWatch.prettyPrint());

        Jedis jedis1 = jedisPool.getResource();
        Set<String> set1 = jedis1.keys("test:shardedJedis*");
        LOGGER.info(String.valueOf(set1.size()));
        jedis1.del(set1.toArray(new String[set1.size()]));

        Jedis jedis2 = jedisPool6380.getResource();
        Set<String> set2 = jedis2.keys("test:shardedJedis*");
        LOGGER.info(String.valueOf(set2.size()));
        jedis2.del(set2.toArray(new String[set2.size()]));

        jedis1.close();
        jedis2.close();
    }

}