package com.appgree.redis;
import java.util.HashSet;
import java.util.Random;
import java.util.Set;
import org.apache.log4j.Logger;
import org.junit.AfterClass;
import org.junit.Assert;
import org.junit.BeforeClass;
import org.junit.Test;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
import com.appgree.core.redis.domain.CacheKey;
import com.appgree.core.redis.provider.RedisCachedProvider;
import com.appgree.core.redis.provider.RedisManager;
import com.appgree.core.redis.provider.RedisPipelinedManager;
import com.appgree.core.redis.provider.RedisProvider;
import com.appgree.core.redis.provider.RedisRemotePipelinedProvider;
import com.appgree.core.redis.provider.RedisRemoteProvider;
import com.appgree.core.redis.provider.RedisSentinelPool;
public class TestRedis {
private static Logger logger = Logger.getLogger(TestRedis.class.getName());
private static RedisProvider provider;
@BeforeClass
public static void init() throws Exception {
logger.debug("Initializing Redis test");
// initializes redis pool
JedisPoolConfig config = new JedisPoolConfig();
config.setMaxTotal(5);
config.setMaxIdle(2);
config.setMinIdle(1);
config.setMaxWaitMillis(1000);
config.setBlockWhenExhausted(true);
config.setTestOnBorrow(true);
config.setTestOnReturn(true);
config.setTimeBetweenEvictionRunsMillis(500);
config.setMinEvictableIdleTimeMillis(-1);
config.setTestWhileIdle(true);
config.setSoftMinEvictableIdleTimeMillis(5000);
config.setNumTestsPerEvictionRun(1);
Set<String> sentinels = new HashSet<String>();
// add sentinels. Each sentinel is defined as "<host>:<port>", you can have as many as configured
// Check sentinels configuration
RedisSentinelPool sentinelPool = null;
if (sentinels != null && sentinels.size() > 0) {
sentinelPool = new RedisSentinelPool(config, sentinels, 200);
}
// Initializes Redis Pipelines
RedisPipelinedManager.staticInit(1000, 10, 5, 5000, 15000, 20, 20, 0);
// create the RedisRemoteProvider, in this case, all are RedisRemotePipelinedProvider
RedisRemotePipelinedProvider pipelinedProvider = new RedisRemotePipelinedProvider();
RedisRemoteProvider noCachedProvider = new RedisRemoteProvider(5000);
// Lets initialize jedis pool
if (sentinelPool != null && sentinels.size() > 0) {
sentinelPool.init("127.0.0.1", pipelinedProvider);
sentinelPool.init("127.0.0.1", noCachedProvider);
} else {
// Initializes independent providers
JedisPool pool = new JedisPool(config, "127.0.0.1", 6379, 3000);
pipelinedProvider.poolChanged(pool);
noCachedProvider.poolChanged(pool);
}
((RedisPipelinedManager) RedisPipelinedManager.getInstance()).init(pipelinedProvider, 0);
// Initializes Redis Manager
RedisProvider cachedProvider = new RedisCachedProvider(RedisPipelinedManager.getInstance(), 61000, 10000);
RedisManager.staticInit(cachedProvider);
provider = RedisManager.getInstance();
}
@AfterClass
public static void destroy() {
RedisManager.uninitAll();
}
@Test
public void readwrite() throws Exception {
CacheKey key = new CacheKey("test", true);
String pong = provider.ping(key).get();
Assert.assertEquals(pong, "PONG");
provider.del(key, key.getName() + "-1");
String res = provider.get(key, key.getName() + "-1").get();
Assert.assertNull(res);
provider.set(key, key.getName() + "-2", "value1");
res = provider.get(key, key.getName() + "-2").get();
Assert.assertEquals(res, "value1");
provider.del(key, key.getName() + "-2");
provider.hset(key, key.getName() + "-hash", "field1", "value-3");
res = provider.hget(key, key.getName() + "-hash", "field1").get();
Assert.assertEquals(res, "value-3");
provider.del(key, key.getName() + "-hash");
}
// @Test
public void TestSortedSets() throws Exception {
String pong = provider.ping(null).get();
Assert.assertEquals(pong, "PONG");
Random rng = new Random(512);
long startTmst = System.currentTimeMillis();
int small = 2000;
int medium = 20000;
int big = 200000;
int[] rand = new int[big];
for (int i = 0; i < big; i++) {
rand[i] = rng.nextInt(Integer.MAX_VALUE);
}
long nextTmst = System.currentTimeMillis();
System.out.println("Rnd initialization in " + (nextTmst - startTmst));
String[] set = new String[big];
for (int i = 0; i < set.length; i++) {
String current = String.valueOf(i);
set[i] = current;
}
startTmst = nextTmst;
nextTmst = System.currentTimeMillis();
System.out.println("Arrays initialization in " + (nextTmst - startTmst));
for (int i = 0; i < small; i++) {
provider.zadd(null, "testSetSmallAsc", i, set[i]).get();
}
startTmst = nextTmst;
nextTmst = System.currentTimeMillis();
System.out.println("" + (nextTmst - startTmst));
for (int i = 0; i < small; i++) {
provider.zadd(null, "testSetSmallDesc", small - i, set[i]).get();
}
startTmst = nextTmst;
nextTmst = System.currentTimeMillis();
System.out.println("" + (nextTmst - startTmst));
for (int i = 0; i < small; i++) {
provider.zadd(null, "testSetSmallRnd", rand[i], set[i]).get();
}
startTmst = nextTmst;
nextTmst = System.currentTimeMillis();
System.out.println("" + (nextTmst - startTmst));
System.out.println(" --- ");
for (int i = 0; i < medium; i++) {
provider.zadd(null, "testSetMediumAsc", i, set[i]).get();
}
startTmst = nextTmst;
nextTmst = System.currentTimeMillis();
System.out.println("" + (nextTmst - startTmst));
for (int i = 0; i < medium; i++) {
provider.zadd(null, "testSetMediumDesc", medium - i, set[i]).get();
}
startTmst = nextTmst;
nextTmst = System.currentTimeMillis();
System.out.println("" + (nextTmst - startTmst));
for (int i = 0; i < medium; i++) {
provider.zadd(null, "testSetSMediumRnd", rand[i], set[i]).get();
}
startTmst = nextTmst;
nextTmst = System.currentTimeMillis();
System.out.println("" + (nextTmst - startTmst));
System.out.println(" --- ");
for (int i = 0; i < big; i++) {
provider.zadd(null, "testSetBigAsc", i, set[i]).get();
}
startTmst = nextTmst;
nextTmst = System.currentTimeMillis();
System.out.println("" + (nextTmst - startTmst));
for (int i = 0; i < big; i++) {
provider.zadd(null, "testSetBigDesc", big - i, set[i]).get();
}
startTmst = nextTmst;
nextTmst = System.currentTimeMillis();
System.out.println("" + (nextTmst - startTmst));
for (int i = 0; i < big; i++) {
provider.zadd(null, "testSetSBigRnd", rand[i], set[i]).get();
}
startTmst = nextTmst;
nextTmst = System.currentTimeMillis();
System.out.println("" + (nextTmst - startTmst));
}
}