Redis客户端之jedis的使用简介

来源:互联网 发布:清真食品 知乎 编辑:程序博客网 时间:2024/06/04 19:34

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-valueString value = jedis.get("key");//读取key-valueSystem.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发布/订阅模式

未完,待续~~~