/** * 获取jedis的连接 * * @return */ public BinaryJedis getCon() { try { if (null == jedis) { System.out.println("jedis 重新获取链接"); this.jedis = jedisPool.getResource(); } } catch (Exception e) { e.printStackTrace(); try { Thread.sleep(10 * 1000); } catch (InterruptedException e1) { e1.printStackTrace(); } if (null == jedis) { this.jedis = jedisPool.getResource(); } } jedis.select(Default_DB); return jedis; }
@Test /** * Binary Jedis tests should be in their own class */ public void testBinaryBitfield() { jedis.close(); BinaryJedis binaryJedis = new BinaryJedis("localhost"); binaryJedis.auth("foobared"); binaryJedis.del("mykey".getBytes()); try { List<Long> responses = binaryJedis.bitfield("mykey".getBytes(), "INCRBY".getBytes(),"i5".getBytes(),"100".getBytes(),"1".getBytes(), "GET".getBytes(), "u4".getBytes(), "0".getBytes()); assertEquals((Long)1l, responses.get(0)); assertEquals((Long)0l, responses.get(1)); } finally { binaryJedis.del("mykey".getBytes()); binaryJedis.close(); } }
@Override public boolean validateObject(PooledObject<Jedis> p) { BinaryJedis jedis = (BinaryJedis) p.getObject(); try { HostAndPort hostAndPort = (HostAndPort) this.hostAndPort.get(); String connectionHost = jedis.getClient().getHost(); int connectionPort = jedis.getClient().getPort(); return ((hostAndPort.getHost().equals(connectionHost)) && (hostAndPort.getPort() == connectionPort) && (jedis.isConnected()) && (jedis.ping().equals("PONG"))); } catch (Exception e) { } return false; }
@PostConstruct public void init() { logger.log(Level.INFO, "Initializing Cache."); jedis = new BinaryJedis("redis-cache"); random = new Random(); try { jedis.sadd(jedisKey.getBytes(), serialize(new TennisMatch("12341234", "ROLLAND GARROS - QUARTER FINALS", "Ferrer D.", "es", "Almagro N.", "es"))); jedis.sadd(jedisKey.getBytes(), serialize(new TennisMatch("12351235", "US OPEN - QUARTER FINALS", "Djokovic N.", "rs", "Berdych T.", "cz"))); jedis.sadd(jedisKey.getBytes(), serialize(new TennisMatch("12361236", "US OPEN - QUARTER FINALS", "Murray A.", "gb", "Chardy J.", "fr"))); jedis.sadd(jedisKey.getBytes(), serialize(new TennisMatch("12371237", "US OPEN - QUARTER FINALS", "Federer R.", "ch", "Tsonga J.W.", "fr"))); }catch (Exception ex){ logger.severe("Error with Redis" + ex.getCause()); } }
public RedisPool(final String host) { URI uri = URI.create(host); if (uri.getScheme() != null && uri.getScheme().equals("redis")) { String h = uri.getHost(); int port = uri.getPort(); String password = JedisURIHelper.getPassword(uri); int database = 0; Integer dbIndex = JedisURIHelper.getDBIndex(uri); if (dbIndex != null) { database = dbIndex.intValue(); } this.internalPool = new GenericObjectPool<BinaryJedis>( new BinaryJedisFactory(h, port, Protocol.DEFAULT_TIMEOUT, password, database, null), new GenericObjectPoolConfig()); } else { this.internalPool = new GenericObjectPool<BinaryJedis>(new BinaryJedisFactory( host, Protocol.DEFAULT_PORT, Protocol.DEFAULT_TIMEOUT, null, Protocol.DEFAULT_DATABASE, null), new GenericObjectPoolConfig()); } }
@Override public PooledObject<BinaryJedis> makeObject() throws Exception { final HostAndPort hostAndPort = this.hostAndPort.get(); final Jedis jedis = new Jedis(hostAndPort.getHost(), hostAndPort.getPort(), this.timeout); jedis.connect(); if (null != this.password) { jedis.auth(this.password); } if (database != 0) { jedis.select(database); } if (clientName != null) { jedis.clientSetname(clientName); } return new DefaultPooledObject<BinaryJedis>(jedis); }
/** * Get Object List * @param clazz * @param keys * @param <T> * @return */ public <T> List<T> mget(final Class<T> clazz, final String... keys){ return this.execute(new RedisCommand<List<T>>(){ public List<T> execute(final BinaryJedis conn) throws Exception { List<byte[]> bytes = conn.mget(SafeEncoder.encodeMany(keys)); List<T> ret = Lists.newArrayList(); for (byte[] item : bytes){ if (item != null) { ret.add(messagePack.read(item, clazz)); }else{ ret.add(null); } } return ret; } }); }
/** * 返回HashMap的K-V值. * @param key * @return */ public Map<String, Integer> hall(final String key){ return this.execute(new RedisCommand<Map<String, Integer>>(){ public Map<String, Integer> execute(final BinaryJedis conn) throws Exception { Map<byte[], byte[]> bs = conn.hgetAll(SafeEncoder.encode(key)); Map<String, Integer> vals = Maps.newHashMap(); Iterator<byte[]> itor = bs.keySet().iterator(); while (itor.hasNext()){ byte[] k = itor.next(); byte[] data = bs.get(k); int v = data == null ? 0 : Integer.parseInt(SafeEncoder.encode(data)); vals.put(SafeEncoder.encode(k), v); } return vals; } }); }
/** * 分页获取队列的元素. * @param key 缓存Key * @param page 页码 * @param limit 每页记录数. * @return */ public List<String> lrange(final String key, final int page, final int limit){ return this.execute(new RedisCommand<List<String>>(){ public List<String> execute(final BinaryJedis conn) throws Exception { long start = (page - 1) * limit; long end = start + limit; List<byte[]> ls = conn.lrange(SafeEncoder.encode(key), start, end); List<String> ret = Lists.newArrayList(); for (byte[] b : ls){ if (b != null) { ret.add(SafeEncoder.encode(b)); } } return ret; } }); }
public <T> List<T> lrange(final Class<T> clazz, final String key, final int page, final int limit){ return this.execute(new RedisCommand<List<T>>(){ public List<T> execute(final BinaryJedis conn) throws Exception { long start = (page - 1) * limit; long end = start + limit; List<byte[]> ls = conn.lrange(SafeEncoder.encode(key), start, end); List<T> ret = Lists.newArrayList(); for (byte[] b : ls){ if (b != null) { ret.add(messagePack.read(b, clazz)); } } return ret; } }); }
public List<String> lpop(final String key, final int limit){ return this.execute(new RedisCommand<List<String>>(){ public List<String> execute(final BinaryJedis conn) throws Exception { byte[] bk = SafeEncoder.encode(key); List<String> resp = Lists.newArrayList(); for (int i = 0; i < limit; i++) { byte[] bs = conn.lpop(bk); if (bs != null){ resp.add(SafeEncoder.encode(bs)); } } return resp; } }); }
public <T> List<T> lpop(final Class<T> clazz, final String key, final int limit){ return this.execute(new RedisCommand<List<T>>(){ public List<T> execute(final BinaryJedis conn) throws Exception { byte[] bk = SafeEncoder.encode(key); List<T> resp = Lists.newArrayList(); for (int i = 0; i < limit; i++) { byte[] bs = conn.lpop(bk); if (bs != null){ resp.add(messagePack.read(bs, clazz)); } } return resp; } }); }
public List<String> rpop(final String key, final int limit){ return this.execute(new RedisCommand<List<String>>(){ public List<String> execute(final BinaryJedis conn) throws Exception { byte[] bk = SafeEncoder.encode(key); List<String> resp = Lists.newArrayList(); for (int i = 0; i < limit; i++) { byte[] bs = conn.rpop(bk); if (bs != null){ resp.add(SafeEncoder.encode(bs)); } } return resp; } }); }
public <T> List<T> rpop(final Class<T> clazz, final String key, final int limit){ return this.execute(new RedisCommand<List<T>>(){ public List<T> execute(final BinaryJedis conn) throws Exception { byte[] bk = SafeEncoder.encode(key); List<T> resp = Lists.newArrayList(); for (int i = 0; i < limit; i++) { byte[] bs = conn.rpop(bk); if (bs != null){ resp.add(messagePack.read(bs, clazz)); } } return resp; } }); }
public Set<String> zrange(final String key, final int page, final int limit){ return this.execute(new RedisCommand<Set<String>>(){ public Set<String> execute(final BinaryJedis conn) throws Exception { long start = (page - 1) * limit; long end = start + limit; Set<byte[]> bs = conn.zrange(SafeEncoder.encode(key), start, end); Set<String> ret = Sets.newHashSet(); for (byte[] b : bs){ if (b != null) { ret.add(SafeEncoder.encode(b)); } } return ret; } }); }
public Set<String> zrevrange(final String key, final int page, final int limit){ return this.execute(new RedisCommand<Set<String>>(){ public Set<String> execute(final BinaryJedis conn) throws Exception { long start = (page - 1) * limit; long end = start + limit; Set<byte[]> bs = conn.zrevrange(SafeEncoder.encode(key), start, end); Set<String> ret = Sets.newHashSet(); for (byte[] b : bs){ if (b != null) { ret.add(SafeEncoder.encode(b)); } } return ret; } }); }
@Override public boolean validateObject(PooledObject<Jedis> pooledJedis) { final BinaryJedis jedis = pooledJedis.getObject(); try { HostAndPort hostAndPort = this.hostAndPort.get(); String connectionHost = jedis.getClient().getHost(); int connectionPort = jedis.getClient().getPort(); return hostAndPort.getHost().equals(connectionHost) && hostAndPort.getPort() == connectionPort && jedis.isConnected() && jedis.ping().equals("PONG"); } catch (final Exception e) { return false; } }
@Override public void activateObject(PooledObject<Jedis> pooledJedis) throws Exception { final BinaryJedis jedis = pooledJedis.getObject(); if (jedis.getDB() != database) { jedis.select(database); } }
@SuppressWarnings("unchecked") @Test public void evalMultiBulkWithBinaryJedis() { String script = "return {KEYS[1],KEYS[2],ARGV[1],ARGV[2],ARGV[3]}"; List<byte[]> keys = new ArrayList<byte[]>(); keys.add("key1".getBytes()); keys.add("key2".getBytes()); List<byte[]> args = new ArrayList<byte[]>(); args.add("first".getBytes()); args.add("second".getBytes()); args.add("third".getBytes()); BinaryJedis binaryJedis = new BinaryJedis(hnp.getHost(), hnp.getPort(), 500); binaryJedis.connect(); binaryJedis.auth("foobared"); List<byte[]> responses = (List<byte[]>) binaryJedis.eval(script.getBytes(), keys, args); assertEquals(5, responses.size()); assertEquals("key1", new String(responses.get(0))); assertEquals("key2", new String(responses.get(1))); assertEquals("first", new String(responses.get(2))); assertEquals("second", new String(responses.get(3))); assertEquals("third", new String(responses.get(4))); binaryJedis.close(); }
@Test public void checkCloseable() { jedis.close(); BinaryJedis bj = new BinaryJedis("localhost"); bj.connect(); bj.close(); }
public static void initRedisProvider() { JedisPoolConfig poolConfig = new JedisPoolConfig(); poolConfig.setMaxIdle(1); poolConfig.setMinEvictableIdleTimeMillis(60 * 1000); poolConfig.setMaxTotal(5); poolConfig.setMaxWaitMillis(30 * 1000); String[] servers = "127.0.0.1:6379".split(","); int timeout = 3000; String password = null; int database = 0; JedisProvider<Jedis, BinaryJedis> provider = new JedisStandaloneProvider("default", poolConfig, servers, timeout, password, database, null); JedisProviderFactory.setDefaultJedisProvider(provider); }
public static void initRedisProvider() { JedisPoolConfig poolConfig = new JedisPoolConfig(); poolConfig.setMaxIdle(1); poolConfig.setMinEvictableIdleTimeMillis(60 * 1000); poolConfig.setMaxTotal(5); poolConfig.setMaxWaitMillis(30 * 1000); String[] servers = "127.0.0.1:6379".split(","); int timeout = 3000; String password = null; int database = 0; JedisProvider<Jedis,BinaryJedis> provider = new JedisStandaloneProvider("default", poolConfig, servers, timeout, password, database,null); JedisProviderFactory.setDefaultJedisProvider(provider); }
@Override public boolean validateObject(PooledObject<Jedis> pooledJedis) { final BinaryJedis jedis = pooledJedis.getObject(); try { return jedis.isConnected() && jedis.ping().equals("PONG"); } catch (final Exception e) { return false; } }
@Override public void activateObject(PooledObject<Jedis> p) throws Exception { BinaryJedis jedis = (BinaryJedis) p.getObject(); if (jedis.getDB().longValue() != this.database) jedis.select(this.database); }
@SuppressWarnings("unchecked") public static <T extends JedisPool> Builder<Jedis, T> newBuilder(Supplier<T> poolFactory) { Builder<Jedis, T> builder = new Builder<>(); builder.poolFactory = (Supplier) poolFactory; builder.jedisType = Jedis.class; builder.binaryJedisType = BinaryJedis.class; return builder; }
public String info() { return this.execute(new RedisCommand<String>() { public String execute(BinaryJedis conn) throws Exception { return conn.info(); } }); }
/** * 关闭数据库连接 * * @param jedis */ private void returnConnection(BinaryJedis jedis) { if (stopping){ return; } if (null != jedis) { try { getJedisPool().returnResource(jedis); } catch (Exception e) { getJedisPool().returnBrokenResource(jedis); } } }
/** * 关闭错误连接 * * @param jedis */ private void returnBrokenConnection(BinaryJedis jedis) { if (stopping){ return; } if (null != jedis) { getJedisPool().returnBrokenResource(jedis); } }
@Override public void activateObject(PooledObject<BinaryJedis> pooledJedis) throws Exception { final BinaryJedis jedis = pooledJedis.getObject(); if (jedis.getDB() != database) { jedis.select(database); } }
@Override public boolean validateObject(PooledObject<BinaryJedis> pooledJedis) { final BinaryJedis jedis = pooledJedis.getObject(); try { HostAndPort hostAndPort = this.hostAndPort.get(); String connectionHost = jedis.getClient().getHost(); int connectionPort = jedis.getClient().getPort(); return hostAndPort.getHost().equals(connectionHost) && hostAndPort.getPort() == connectionPort && jedis.isConnected() && jedis.ping().equals("PONG"); } catch (final Exception e) { return false; } }
/** * multi get * @param keys keys * @return List<String> */ public List<String> mget(final String... keys){ return this.execute(new RedisCommand<List<String>>(){ public List<String> execute(final BinaryJedis conn) throws Exception { List<byte[]> bytes = conn.mget(SafeEncoder.encodeMany(keys)); List<String> ret = Lists.newArrayList(); for (byte[] item : bytes){ if (item != null) { ret.add(SafeEncoder.encode(item)); } } return ret; } }); }
/** * get single key * @param key key * @return String */ public String get(final String key){ return this.execute(new RedisCommand<String>(){ public String execute(final BinaryJedis conn) throws Exception { byte[] bytes = conn.get(SafeEncoder.encode(key)); if (bytes == null){ return null; } return SafeEncoder.encode(bytes); } }); }
/** * Get Object * @param clazz * @param key * @param <T> * @return */ public <T> T get(final Class<T> clazz, final String key){ return this.execute(new RedisCommand<T>(){ public T execute(final BinaryJedis conn) throws Exception { byte[] bytes = conn.get(SafeEncoder.encode(key)); if (bytes == null){ return null; } return messagePack.read(bytes, clazz); } }); }