Redis客户端之jedis的使用简介

Redis客户端之jedis的使用简介

依赖两个jar包:

jedis-2.9.0.jar和commons-pool2-2.4.2.jar

1.Jedis简单使用

/**
*@param host String
*@param port int
*/
Jedis jedis = new Jedis("localhost", 6379);//初始化
jedis.set("key", "value");//写入key-value
String value = jedis.get("key");//读取key-value
System.out.println("value:"+value);
jedis.disconnect();
jedis.close();

上述代码简单说明了利用jedis对redis实现简单的读写操作,当然redis支持多种数据类型的读写操作,后续会单独写一篇文章详细描述。
执行上面的代码即可输出value值,注意host和port的值要根据具体的redis配置进行设置,并且需要在最后释放资源,关闭连接,后面会涉及到redis连接池的概念,相应的为释放回收资源.

2.Jedis连接池的使用

private static JedisPool jedisPool;

public static JedisPool getPool()
{
    if(null == jedisPool)
    {
        JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
        jedisPoolConfig.setMaxIdle(5); //设置一个pool中闲置(idle)的jedis实例个数
        jedisPoolConfig.setMaxWaitMillis(2000);//设置最长等待时间(获取jedis实例的时间)
        jedisPoolConfig.setMaxTotal(100);//设置pool分配的jedis实例最大数量
        jedisPoolConfig.setTestOnBorrow(true);//设置在获取jedis实例前进行可用性检查
        jedisPool = new JedisPool(jedisPoolConfig, "localhost", 6379, 3000);//初始化pool
    }
    return jedisPool;
}

/**
 * 回收jedis实例
 * @param jedisPool
 * @param jedis
 * @param isBroken true为异常情况,false为正常情况
 */
@SuppressWarnings("deprecation")
public static void returnResource(JedisPool jedisPool, Jedis jedis, boolean isBroken)
{
    if(null == jedis){
        return;
    }
    if(isBroken){
        jedisPool.returnResourceObject(jedis);
    }else{
        jedisPool.returnResource(jedis);
    }
}

public static String get(String key)
{
    JedisPool pool = null;
    Jedis jedis = null;
    boolean isBroken = false;
    try{
        pool = getPool();
        jedis = pool.getResource();
        String value = jedis.get(key);
        return value;
    }catch(Exception e){
        isBroken = true;
        e.printStackTrace();
    }finally{
        returnResource(pool, jedis, isBroken);
    }
    return null;
}

需要注意的是在回收jedis实例时,如果出现异常情况,回收的方式会有所不同,
@see returnResource(JedisPool jedisPool, Jedis jedis, boolean isBroken)
池化是目前比较普遍常规的操作,如果无限制的创建jedis实例或者在需要时才创建jedis实例,这样的做法是低效的,会存在一定的性能问题(视情况而定),像对线程的使用一般也是要进行池化操作的。

3.Jedis的分布式实现

private static ShardedJedisPool shardedJedisPool;
private static final String HOST_MASTER = "localhost"; //主机
private static final int HOST_MASTER_PORT = 6379;//主机端口
private static final String HOST_SLAVE = "192.168.193.37";//从机
private static final int HOST_SLAVE_PORT = 6379;//从机端口

public static ShardedJedisPool getShardedPool()
{
    if(null == jedisPool)
    {
        JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
        jedisPoolConfig.setMaxIdle(5); //设置一个pool中闲置(idle)的jedis实例个数
        jedisPoolConfig.setMaxWaitMillis(2000);//设置最长等待时间(获取jedis实例的时间)
        jedisPoolConfig.setMaxTotal(100);//设置pool分配的jedis实例最大数量
        jedisPoolConfig.setTestOnBorrow(true);//设置在获取jedis实例前进行可用性检查

        //存入redis服务器主机信息
        List<JedisShardInfo> jedisInfoList = new ArrayList<JedisShardInfo>();
        JedisShardInfo masterShardInfo = new JedisShardInfo(HOST_MASTER, HOST_MASTER_PORT);
        JedisShardInfo slaveShardInfo = new JedisShardInfo(HOST_SLAVE, HOST_SLAVE_PORT);
        jedisInfoList.add(masterShardInfo);
        jedisInfoList.add(slaveShardInfo);

        shardedJedisPool = new ShardedJedisPool(jedisPoolConfig, jedisInfoList,Hashing.MURMUR_HASH,Sharded.DEFAULT_KEY_TAG_PATTERN);
    }
    return shardedJedisPool;
}

这里只简单说明分布式jedis连接池的初始化方式,get、set方式与普通的jedis无异,这里不再展开描述。当然,在实际开发过程中,有关redis服务器的相关配置一般是在properties文件中配置的,这里为简化操作,直接在代码中写明。在大规模的应用系统中,分布式的redis缓存是必不可少的,因此掌握redis的分布式实现也是很有必要的。同样,这一块后续也会有详细的文章作介绍。

4.Jedis的pipeline管道

管道的作用在于便于做数据批量操作。

5.Jedis的Pub/Sub发布/订阅模式

未完,待续~~~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值