注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

0与1构筑世界,程序员创造时代

软件架构设计 Java编程

 
 
 

日志

 
 

使用Redis的Java客户端Jedis  

2014-08-29 20:31:07|  分类: Redis |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
四川黄龙

 前一篇文章《Redis命令指南》讲解了通过命令行的方式执行Key=>的存储操作,在实际的项目开发中,各种语言是使用Redis的客户端库来与Redis交互。针对Java语言,Redis官方推荐Jedis

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) );

运行上述代码,控制台输出:

set指令执行结果:OK              
get指令执行结果:Hello, Redis!

使用连接池

此方式适用于仅使用单个Redis实例的场景。

// 生成连接池配置信息
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();

运行上述代码,控制台输出:

set指令执行结果:OK              
get指令执行结果:Hello, Redis!

使用连接池+分布式

在规模较大的系统中,往往会有多个Redis实例做负载均衡。并且还实现主从备份,当主实例发生故障时,切换至从实例提供服务。
类似于Memcached的客户端,Jedis也提供了客户端分布式操作的方式,采用一致性哈希算法。

// 生成多机连接信息列表
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!


<正文结束>

文章声明


作者:傲风(aofengblog@163.com)       编写时间:2014年08月29日

网址:http://aofengblog.blog.163.com

作者保留所有权利,转载请保留文章全部内容或者说明原作者和转载地址!


  评论这张
 
阅读(19713)| 评论(2)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017