Jedis使用

目录 
1 JEDIS简介 1 
2 JEDIS简单使用 1 
3 JEDIS的池使用 2 
4 JEDIS的分布式 4
 
1 Jedis简介
Jedis是Redis的java客户端。我们可以在java编程中使用它来编写java代码访问Redis服务。 
关于Redis简绍: http://xmong.iteye.com/blog/1840242


要使用Jedis可以通过maven来获取
    <dependency> 
        <groupId>redis.clients</groupId> 
        <artifactId>jedis</artifactId> 
        <version>2.1.0</version> 
        <type>jar</type> 
        <scope>compile</scope> 
    </dependency> 
 
也可以通过下面路径来下载Jedis包,将包加到java工程里面就可以了。 
https://github.com/xetorthio/jedis/downloads 
当前使用的包名:jedis-2.1.0.jar 


2 Jedis简单使用
Jedis的简单使用代码如下:
import redis.clients.jedis.Jedis;
 
/**
 * 简单使用jedis
 *
 * @author xmong
 */
public class TestJedis {
 
    // redis服务器主机
    static String host = "172.30.5.117";
    // 端口号
    static int port = 6379;
    public static void main(String[] args) {
       // 根据redis主机和端口号实例化Jedis对象
       Jedis jedis = new Jedis(host, port);
       // 添加key-value对象,如果key对象存在就覆盖该对象
       jedis.set("name", "xmong");
       // 查取key的value值,如果key不存在返回null
       String value = jedis.get("name");
       System.out.println(value);
       // 删除key-value对象,如果key不存在则忽略此操作
       jedis.del("name");
       // 判断key是否存在,不存在返回false存在返回true
       jedis.exists("name");
    }
}
 
3 Jedis的池使用
我们在实现jedis池使用的时候除了要将jedis包引入工程外,还需要将apache的commons-pool-xx包也引入工程,因为 JedisPool实际是应用apache的GenericObjectPool来作为redis连接经管pool的,这点可以从分析Jedis的源码知 道。 


Commons-pool-1.6.jar包下载: 
http://commons.apache.org/proper/commons-pool/download_pool.cgi 


Redis配置文件(redis.properties)如下:
    #redis服务器ip #   
    redis.ip=172.30.5.117 
   
    #redis服务器端口号# 
    redis.port=6379 
     
    ###jedis##pool##config### 
    #jedis的最大分配对象# 
    jedis.pool.maxActive=1024 
   
    #jedis最大保存idel状态对象数 # 
    jedis.pool.maxIdle=200 
   
    #jedis池没有对象返回时,最大等待时间 # 
    jedis.pool.maxWait=1000 
   
    #jedis调用borrowObject方法时,是否进行有效检查# 
    jedis.pool.testOnBorrow=true 
   
    #jedis调用returnObject方法时,是否进行有效检查 # 
    jedis.pool.testOnReturn=true
 
代码实现如下:
import java.util.ResourceBundle;
 
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
 
/**
 * jedis池使用
 *
 * @author xmong
 */
public class MyJedisPool {
 
    // jedis池
    private static JedisPool pool;
    // 静态代码初始化池配置
    static {
       // 加载redis配置文件
       ResourceBundle bundle = ResourceBundle.getBundle("redis");
       if (bundle == null) {
           throw new IllegalArgumentException("[redis.properties] is not found!");
       }
       // 创建jedis池配置实例
       JedisPoolConfig config = new JedisPoolConfig();
       // 设置池配置项值
       config.setMaxActive(Integer.valueOf(bundle.getString("redis.pool.maxActive")));
       config.setMaxIdle(Integer.valueOf(bundle.getString("redis.pool.maxIdle")));
       config.setMaxWait(Long.valueOf(bundle.getString("redis.pool.maxWait")));
        config.setTestOnBorrow(Boolean.valueOf(bundle.getString("redis.pool.testOnBorrow")));
        config.setTestOnReturn(Boolean.valueOf(bundle.getString("redis.pool.testOnReturn")));
       // 根据配置实例化jedis池
       pool = new JedisPool(config, bundle.getString("redis.ip"), Integer.valueOf(bundle.getString("redis.port")));
    }
 
    /**
     * 测试jedis池方法
     */
    public static void test1() {
       // 从jedis池中获取一个jedis实例
       Jedis jedis = pool.getResource();
 
       // 获取jedis实例后可以对redis服务进行一系列的操作
       jedis.set("name", "xmong");
       System.out.println(jedis.get("name"));
       jedis.del("name");
       System.out.println(jedis.exists("name"));
 
       // 释放对象池,即获取jedis实例使用后要将对象还回去
       pool.returnResource(jedis);
    }
 
    public static void main(String[] args) {
       test1();// 执行test1方法
    }
}
 
执行结果如下:
    xmong  
    false 
 
4 Jedis的分布式
Redis在容灾处理方面可以通过服务器端配置Master-Slave模式来实现。而在分布式集群方面目前只能通过客户端工具来实现一致性哈希分布存储,即key分片存储。Redis可能会在3.0版本支持服务器端的分布存储。
下面看看Jedis是怎样实现Redis分布存储的。
在上面的列子中我们只需要修改部分代码即可实现Redis的分布存储功能。
修改Redis配置文件中reidis服务器配置选项:
    ###redis##config######## 
    #redis1服务器ip #  
    Redis1.ip=172.30.5.113 
   
    #redis2服务器ip #  
    Redis2.ip=172.30.5.117 
   
    #redis服务器端口号# 
    redis.port=6379 
修改MyJedisPool代码如下:
package com.jedis;
 
import java.util.LinkedList;
import java.util.List;
import java.util.ResourceBundle;
 
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
import redis.clients.jedis.JedisShardInfo;
import redis.clients.jedis.ShardedJedis;
import redis.clients.jedis.ShardedJedisPool;
 
/**
 * jedis池使用
 *
 * @author xmong
 */
public class MyJedisPool {
 
    // jedis池
    private static JedisPool pool;
    // shardedJedis池
    private static ShardedJedisPool shardPool;
    // 静态代码初始化池配置
    static {
       // 加载redis配置文件
       ResourceBundle bundle = ResourceBundle.getBundle("redis");
       if (bundle == null) {
           throw new IllegalArgumentException("[redis.properties] is not found!");
       }
       // 创建jedis池配置实例
       JedisPoolConfig config = new JedisPoolConfig();
       // 设置池配置项值
       config.setMaxActive(Integer.valueOf(bundle.getString("redis.pool.maxActive")));
       config.setMaxIdle(Integer.valueOf(bundle.getString("redis.pool.maxIdle")));
       config.setMaxWait(Long.valueOf(bundle.getString("redis.pool.maxWait")));
        config.setTestOnBorrow(Boolean.valueOf(bundle.getString("redis.pool.testOnBorrow")));
        config.setTestOnReturn(Boolean.valueOf(bundle.getString("redis.pool.testOnReturn")));
 
       // 根据配置实例化jedis池
       // pool = new JedisPool(config, bundle.getString("redis.ip"),
       // Integer.valueOf(bundle.getString("redis.port")));
 
       // 创建多个redis共享服务
       JedisShardInfo jedisShardInfo1 = new JedisShardInfo(bundle.getString("redis1.ip"), Integer.valueOf(bundle
              .getString("redis.port")));
       JedisShardInfo jedisShardInfo2 = new JedisShardInfo(bundle.getString("redis2.ip"), Integer.valueOf(bundle
              .getString("redis.port")));
 
       List<JedisShardInfo> list = new LinkedList<JedisShardInfo>();
       list.add(jedisShardInfo1);
       list.add(jedisShardInfo2);
 
       // 根据配置文件,创建shared池实例
       shardPool = new ShardedJedisPool(config, list);
 
    }
 
    /**
     * 测试jedis池方法
     */
    public static void test1() {
       // 从jedis池中获取一个jedis实例
       Jedis jedis = pool.getResource();
 
       // 获取jedis实例后可以对redis服务进行一系列的操作
       jedis.set("name", "xmong");
       System.out.println(jedis.get("name"));
       jedis.del("name");
       System.out.println(jedis.exists("name"));
 
       // 释放对象池,即获取jedis实例使用后要将对象还回去
       pool.returnResource(jedis);
    }
 
    /**
     * 测试shardedJedis池方法
     */
    public static void test2() {
       // 从shard池中获取shardJedis实例
       ShardedJedis shardJedis = shardPool.getResource();
 
       // 向redis服务插入两个key-value对象
       shardJedis.set("aaa", "xmong_aaa");
       System.out.println(shardJedis.get("aaa"));
       shardJedis.set("zzz", "xmong_zzz");
       System.out.println(shardJedis.get("zzz"));
 
       // 释放资源
       shardPool.returnResource(shardJedis);
    }
 
    public static void main(String[] args) {
       // test1();//执行test1方法
       test2();// 执行test2方法
    }
}
 
执行结果为:
    xmong_aaa  
    xmong_zzz
 
可以通过下面程序访问不同的redis服务来测试结果:
package com.jedis;
 
import redis.clients.jedis.Jedis;
 
/**
 * 简单使用jedis
 * @author xmong
 *
 */
public class TestJedis {
 
    //redis服务器主机
    static String host = "172.30.5.113";
    //端口号
    static int port = 6379;
   
    public static void main(String[] args) {
       //根据redis主机和端口号实例化Jedis对象
       Jedis jedis = new Jedis(host, port);
       //查取key的value值,如果key不存在返回null
       String value1 = jedis.get("aaa");
       System.out.println(value1);
       String value2 = jedis.get("zzz");
       System.out.println(value2);
    }
}
 
执行结果为:
    xmong_aaa  
    null
 
修改redis服务器
    static String host = "172.30.5.117";
 
执行结果为:
    null
    xmong_zzz
 
从测试结果可以知道,ShardedJedis实现了Redis的分布存储,分别从不同的redis服务器查取结果可以得知,ShardedJedis将key为aaa的值存储到了ip为113的redis服务器上,把key为zzz的值存储到了ip为117的服务器上。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值