package rfx.server.util.redis; import java.util.ArrayList; import java.util.List; import java.util.Set; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import org.apache.log4j.Logger; import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisShardInfo; import redis.clients.jedis.Pipeline; import redis.clients.jedis.ShardedJedis; import redis.clients.jedis.ShardedJedisPool; import rfx.server.configs.RedisPoolConfigs; import rfx.server.util.StringPool; public class RedisManagerUtil { static Logger logger = Logger.getLogger(RedisManagerUtil.class); static ShardedJedisPool redisIPLocationPool; static ExecutorService redisExecutor = Executors.newSingleThreadExecutor(); private static RedisPoolConfigs redisConfigs; static { redisConfigs = RedisPoolConfigs.load(); // IP => location String host = redisConfigs.getIPLocation().get("host"); int port = Integer.parseInt(redisConfigs.getIPLocation().get("port")); List<JedisShardInfo> redisIPLocationShard = new ArrayList<JedisShardInfo>(); redisIPLocationShard.add(new JedisShardInfo(host, port, 0)); redisIPLocationPool = new ShardedJedisPool(redisConfigs.getJedisPoolConfig(), redisIPLocationShard); } public static ShardedJedisPool getIPLocationPool() { return redisIPLocationPool; } public static RedisPoolConfigs getRedisPoolConfigs() { return redisConfigs; } public static Jedis getInstance(String host) { return new Jedis(host); } /** * the redis at localhost * * @return */ public static Jedis getLocalHostRedis() { return new Jedis("localhost"); } public static void dumpLogHashMap(final Jedis jedis, final String hashmapName) { System.out.println("---jedis.map: " + hashmapName); Set<String> set = jedis.hkeys(hashmapName); for (String s : set) { System.out.println(s + " - " + jedis.hget(hashmapName, s)); } } public static boolean isRedisConnectionOk(final Jedis jedis) { if (jedis == null) { throw new IllegalArgumentException("Jedis param is null"); } if (!jedis.isConnected()) { jedis.connect(); return jedis.ping().equalsIgnoreCase("PONG"); } return false; } public static void increaseIpAddressAndHttpPath(final String ipAdress, final String httpPath) { redisExecutor.execute(new Runnable() { @Override public void run() { ShardedJedisPool jedisPool = getIPLocationPool(); ShardedJedis shardedJedis = null; boolean commited = false; try { shardedJedis = jedisPool.getResource(); Jedis jedis = shardedJedis.getShard(StringPool.BLANK); Pipeline pipe = jedis.pipelined(); //pipe.hincrBy("ip-monitor", ipAdress, 1L); pipe.hincrBy("httpPath-monitor", httpPath.replace("/", "-"), 1L); pipe.sync(); commited = true; } catch (Exception e) { e.printStackTrace(); } finally { if (commited) { jedisPool.returnResource(shardedJedis); } else { jedisPool.returnBrokenResource(shardedJedis); } } } }); } public static void logCounter(final String name) { redisExecutor.execute(new Runnable() { @Override public void run() { ShardedJedisPool jedisPool = getIPLocationPool(); ShardedJedis shardedJedis = null; boolean commited = false; try { shardedJedis = jedisPool.getResource(); Jedis jedis = shardedJedis.getShard(StringPool.BLANK); Pipeline pipe = jedis.pipelined(); pipe.hincrBy("log-monitor", name, 1L); pipe.sync(); commited = true; } catch (Exception e) { e.printStackTrace(); } finally { if (commited) { jedisPool.returnResource(shardedJedis); } else { jedisPool.returnBrokenResource(shardedJedis); } } } }); } }