Jedis提供了多种操做方式:单机单链接方式、单机链接池方式、多机分布式+链接池方式。算法
jedis-2.5.2
commons-pool2-2.2.jar负载均衡
此方式仅建议用于开发环境作调试用。分布式
// 建立链接
String host = "192.168.56.102"; int port = 6379; Jedis client = new Jedis(host, port);
// 执行set指令 String result = client.set("key-string", "Hello, Redis!"); System.out.println( String.format("set指令执行结果:%s", result) );
// 执行get指令 String value = client.get("key-string"); System.out.println( String.format("get指令执行结果:%s", value) );
运行上述代码,控制台输出:spa
set指令执行结果:OK
get指令执行结果:Hello, Redis!调试
此方式适用于仅使用单个Redis实例的场景。code
// 生成链接池配置信息 JedisPoolConfig config = new JedisPoolConfig(); config.setMaxIdle(10); config.setMaxTotal(30); config.setMaxWaitMillis(3*1000); // 在应用初始化的时候生成链接池 JedisPool pool = new JedisPool(config, "192.168.56.102", 6379); // 在业务操做时,从链接池获取链接 Jedis client = pool.getResource(); try { // 执行指令 String result = client.set("key-string", "Hello, Redis!"); System.out.println( String.format("set指令执行结果:%s", result) ); String value = client.get("key-string"); System.out.println( String.format("get指令执行结果:%s", value) ); } catch (Exception e) { // TODO: handle exception } finally { // 业务操做完成,将链接返回给链接池 if (null != client) { pool.returnResource(client); } } // end of try block // 应用关闭时,释放链接池资源 pool.destroy();
运行上述代码,控制台输出:orm
set指令执行结果:OK
get指令执行结果:Hello, Redis!blog
在规模较大的系统中,每每会有多个Redis实例作负载均衡。而且还实现主从备份,当主实例发生故障时,切换至从实例提供服务。
相似于Memcached的客户端,Jedis也提供了客户端分布式操做的方式,采用一致性哈希算法。ci
// 生成多机链接信息列表 List<JedisShardInfo> shards = new ArrayList<JedisShardInfo>(); shards.add( new JedisShardInfo("127.0.0.1", 6379) ); shards.add( new JedisShardInfo("192.168.56.102", 6379) ); // 生成链接池配置信息 JedisPoolConfig config = new JedisPoolConfig(); config.setMaxIdle(10); config.setMaxTotal(30); config.setMaxWaitMillis(3*1000); // 在应用初始化的时候生成链接池 ShardedJedisPool pool = new ShardedJedisPool(config, shards); // 在业务操做时,从链接池获取链接 ShardedJedis client = pool.getResource(); try { // 执行指令 String result = client.set("key-string", "Hello, Redis!"); System.out.println( String.format("set指令执行结果:%s", result) ); String value = client.get("key-string"); System.out.println( String.format("get指令执行结果:%s", value) ); } catch (Exception e) { // TODO: handle exception } finally { // 业务操做完成,将链接返回给链接池 if (null != client) { pool.returnResource(client); } } // end of try block // 应用关闭时,释放链接池资源 pool.destroy();
运行上述代码,控制台输出:
资源
set指令执行结果:OK get指令执行结果:Hello, Redis!