Redis客户端-Jedis

一、jedis

jedis 是 redis推荐的java客户端。通过Jedis我们可以很方便地使用java代码的方式,对redis进行操作。jedis使用起来比较简单,它的操作方法与redis命令相类似。对于初次使用redis的人来说,上手更快,更能适应。jedis在github上的下载地址为https://github.com/xetorthio/jedis 。本例子使用maven,需要添加如下依赖:

<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
    <version>2.6.0</version> 
</dependency>

二、相关实例

2.1、测试联通

2.2、常用API操作

1、创建 jedis对象

      

2、键操作:

      

3、字符串操作:

      

4、整数和浮点数操作:

      

5、列表(List)操作:

      

6、集合(Set)操作:

      

7、哈希(Hash)操作:

      

8、有序集合(Zsort)操作:

      

9、排序操作:

      

2.3、事物

package com.atguigu.redis.test;

import redis.clients.jedis.Jedis;
import redis.clients.jedis.Transaction;

public class TestTX {
    public boolean transMethod() throws InterruptedException {
         Jedis jedis = new Jedis("127.0.0.1", 6379);
         int balance;// 可用余额
         int debt;// 欠额
         int amtToSubtract = 10;// 实刷额度

         //加watch监控
         jedis.watch("balance");
         //jedis.set("balance","5");//此句不该出现,讲课方便。模拟其他程序已经修改了该条目
         Thread.sleep(7000);
         balance = Integer.parseInt(jedis.get("balance"));
         //余额不足时
         if (balance < amtToSubtract) {
           jedis.unwatch();
           System.out.println("modify");
           return false;
         } else {
           System.out.println("***********transaction");
           //开启事物
           Transaction transaction = jedis.multi();
           transaction.decrBy("balance", amtToSubtract);
           transaction.incrBy("debt", amtToSubtract);
           //提交事物
           transaction.exec();
           balance = Integer.parseInt(jedis.get("balance"));
           debt = Integer.parseInt(jedis.get("debt"));

           System.out.println("*******" + balance);
           System.out.println("*******" + debt);
           return true;
         }
      }

      /**
       * 通俗点讲,watch命令就是标记一个键,如果标记了一个键, 
       * 在提交事务前如果该键被别人修改过,那事务就会失败,这种情况通常可以在程序中
       * 重新再尝试一次。
       * 首先标记了键balance,然后检查余额是否足够,不足就取消标记,并不做扣减; 
       * 足够的话,就启动事务进行更新操作,
       * 如果在此期间键balance被其它人修改, 那在提交事务(执行exec)时就会报错, 
       * 程序中通常可以捕获这类错误再重新执行一次,直到成功。
     * @throws InterruptedException 
       */
      public static void main(String[] args) throws InterruptedException {
         TestTX test = new TestTX();
         boolean retValue = test.transMethod();
         System.out.println("main retValue-------: " + retValue);
      }    
}
 

2.4、Jedis池

获取Jedis实例需要从JedisPool中获取,用完Jedis实例需要返还给JedisPool。

package com.atguigu.redis.test;

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;

public class JedisPoolUtil 
{
    private static volatile JedisPool jedisPool = null;
    
    private JedisPoolUtil(){}
    
    public static JedisPool getJedisPoolInstance()
    {
        if(null == jedisPool)
        {
            synchronized (JedisPoolUtil.class)
            {
                if(null == jedisPool)
                {
                    JedisPoolConfig poolConfig = new JedisPoolConfig();
                    poolConfig.setMaxActive(1000);
                    poolConfig.setMaxIdle(32);
                    poolConfig.setMaxWait(100*1000);
                    poolConfig.setTestOnBorrow(true);

                    jedisPool = new JedisPool(poolConfig,"127.0.0.1",6379);
                }
            }
        }
        return jedisPool;
    }

    public static void release(JedisPool jedisPool,Jedis jedis)
    {
        if(null != jedis)
        {
            jedisPool.returnResourceObject(jedis);
        }
    }
    
}

package com.atguigu.redis.test;

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;

public class TestPool {

    public static void main(String[] args) {         JedisPool jedisPool = JedisPoolUtil.getJedisPoolInstance();         JedisPool jedisPool2 = JedisPoolUtil.getJedisPoolInstance();                  System.out.println(jedisPool == jedisPool2);                  Jedis jedis = null;         try {             jedis = jedisPool.getResource();             jedis.set("aa","bb");         } catch (Exception e) {             e.printStackTrace();         }finally{             JedisPoolUtil.release(jedisPool, jedis);         }     } }