使用Jedis提供的Java API对Redis进行操作,是Redis官方推崇的方式;并且使用Jedis提供的对Redis的支持是最为灵活全面的;

        首先需要在项目中添加对jedis的jar包。在使用时单机版和集群版有区别,分别看一下在项目中的使用。

单机版

        创建单实例jedis对象连接redis服务


// 单实例连接redis
    @Test
    public voidtestJedisSingle() {
 
       Jedis jedis = new Jedis("192.168.190.3", 6379);//实例化一个jedis
       jedis.set("name", "zhangsan");//存储
       String name = jedis.get("name");//获取
       System.out.println(name);//输出
 
    }


        单实例连接redis不能对redis连接进行共享,可以使用连接池对redis连接进行共享,提高资源利用率。


@Test
    public void testPool() {
       JedisPoolConfig config = newJedisPoolConfig();
       //最大连接数
       config.setMaxTotal(10);
       //最大连接空闲数
       config.setMaxIdle(2);
      
       JedisPool pool = newJedisPool(config, "192.168.190.3", 6379);//创建连接池
       Jedis jedis = null;
 
       try  {
           jedis =pool.getResource();//通过连接池获取redis实例
          
           jedis.set("name", "zhangsan");//赋值
           String name = jedis.get("name");//取值
           System.out.println(name);
       }catch(Exception ex){
           ex.printStackTrace();
       }finally{
           if(jedis != null){
              //关闭连接
              jedis.close();
           }
       }
      
    }



集群版

        使用连接池


// 连接redis集群
    @Test
    public voidtestJedisCluster() {
 
       JedisPoolConfig config = newJedisPoolConfig();
       // 最大连接数
       config.setMaxTotal(10);
       // 最大连接空闲数
       config.setMaxIdle(2);
 
       //集群结点
       Set<HostAndPort>jedisClusterNode = new HashSet<HostAndPort>();
       jedisClusterNode.add(new HostAndPort("192.168.190.3", 7001));
       jedisClusterNode.add(new HostAndPort("192.168. 190.3", 7002));
       jedisClusterNode.add(new HostAndPort("192.168. 190.3", 7003));
       jedisClusterNode.add(new HostAndPort("192.168. 190.3", 7004));
       jedisClusterNode.add(new HostAndPort("192.168. 190.3", 7005));
       jedisClusterNode.add(new HostAndPort("192.168.190.3", 7006));
       JedisCluster jc = newJedisCluster(jedisClusterNode, config);
      
       JedisCluster jcd = newJedisCluster(jedisClusterNode);
       jcd.set("name", "zhangsan");
       String value = jcd.get("name");
       System.out.println(value);
    }

 

        和spring整合:

        以上单机版和集群版都使用到了连接池,连接池的属性应该是灵活可配的可以和spring的配置文件进行整             合。可以独立建立一个applicationContext-jedis.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p"
    xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
    http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
    http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
    http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.0.xsd">
    <!-- 连接池配置 -->
    <bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
       <!-- 最大连接数 -->
       <property name="maxTotal" value="30" />
       <!-- 最大空闲连接数 -->
       <property name="maxIdle" value="10" />
       <!-- 每次释放连接的最大数目 -->
       <property name="numTestsPerEvictionRun" value="1024" />
       <!-- 释放连接的扫描间隔(毫秒) -->
       <property name="timeBetweenEvictionRunsMillis" value="30000" />
       <!-- 连接最小空闲时间 -->
       <property name="minEvictableIdleTimeMillis" value="1800000" />
       <!-- 连接空闲多久后释放, 当空闲时间>该值且空闲连接>最大空闲连接数时直接释放 -->
       <property name="softMinEvictableIdleTimeMillis" value="10000" />
       <!-- 获取连接时的最大等待毫秒数,小于零:阻塞不确定的时间,默认-1 -->
       <property name="maxWaitMillis" value="1500" />
       <!-- 在获取连接的时候检查有效性, 默认false -->
       <property name="testOnBorrow" value="true" />
       <!-- 在空闲时检查有效性, 默认false -->
       <property name="testWhileIdle" value="true" />
       <!-- 连接耗尽时是否阻塞, false报异常,ture阻塞直到超时, 默认true -->
       <property name="blockWhenExhausted" value="false" />
    </bean>   
    <!-- jedis客户端单机版 -->
    <!-- <bean id="redisClient" class="redis.clients.jedis.JedisPool">
       <constructor-arg name="host" value="192.168.25.153"></constructor-arg>
       <constructor-arg name="port" value="6379"></constructor-arg>
       <constructor-arg name="poolConfig" ref="jedisPoolConfig"></constructor-arg>
    </bean>
    <bean id="jedisClient" class="com.taotao.rest.dao.impl.JedisClientSingle"/> -->
   
   
    <!-- jedis集群版配置 -->
    <bean id="redisClient" class="redis.clients.jedis.JedisCluster">
       <constructor-arg name="nodes">
           <set>
              <bean class="redis.clients.jedis.HostAndPort">
                  <constructor-arg name="host" value="192.168.25.153"></constructor-arg>
                  <constructor-arg name="port" value="7001"></constructor-arg>
              </bean>
              <bean class="redis.clients.jedis.HostAndPort">
                  <constructor-arg name="host" value="192.168.25.153"></constructor-arg>
                  <constructor-arg name="port" value="7002"></constructor-arg>
              </bean>
              <bean class="redis.clients.jedis.HostAndPort">
                  <constructor-arg name="host" value="192.168.25.153"></constructor-arg>
                  <constructor-arg name="port" value="7003"></constructor-arg>
              </bean>
              <bean class="redis.clients.jedis.HostAndPort">
                  <constructor-arg name="host" value="192.168.25.153"></constructor-arg>
                  <constructor-arg name="port" value="7004"></constructor-arg>
              </bean>
              <bean class="redis.clients.jedis.HostAndPort">
                  <constructor-arg name="host" value="192.168.25.153"></constructor-arg>
                  <constructor-arg name="port" value="7005"></constructor-arg>
              </bean>
              <bean class="redis.clients.jedis.HostAndPort">
                  <constructor-arg name="host" value="192.168.25.153"></constructor-arg>
                  <constructor-arg name="port" value="7006"></constructor-arg>
              </bean>
           </set>
       </constructor-arg>
       <constructor-arg name="poolConfig" ref="jedisPoolConfig"></constructor-arg>
    </bean>
    <bean id="jedisClientCluster" class="com.taotao.rest.dao.impl.JedisClientCluster"></bean>
</beans>




        以上配置文件中添加了redis的连接池,同时配置了单机版和集群版的bean,当然单机版和集群版是不能同时存在的,分别测试好了以后在开放时可以使用单机版的,单机版redis可以使用可视化功能查看其中的数据,在发布时切换到集群版。

/**
     * 单机版测试
     * <p>Title: testSpringJedisSingle</p>
     * <p>Description: </p>
     */
    @Test
    public void testSpringJedisSingle() {
       ApplicationContext applicationContext = new ClassPathXmlApplicationContext("classpath:spring/applicationContext-*.xml");
       JedisPool pool = (JedisPool) applicationContext.getBean("redisClient");
       Jedis jedis = pool.getResource();
       jedis.set("key0", "jedis test");
       String string = jedis.get("key0");
       System.out.println(string);
       jedis.close();
       pool.close();
    }
     /**
     * 集群版测试
     * <p>Title: testSpringJedisCluster</p>
     * <p>Description: </p>
     */
 
    @Test
    public void testSpringJedisCluster() {
       ApplicationContext applicationContext = new ClassPathXmlApplicationContext("classpath:spring/applicationContext-*.xml");
       JedisCluster jedisCluster =  (JedisCluster) applicationContext.getBean("redisClient");
       cluster.set("key1", "1000");
       String string = jedisCluster.get("key1");
       System.out.println(string);
       jedisCluster.close();
    }



        

小结 

        实例中只使用了jedis的set方法,其他方法的使用可以查询redis的api。在实际的业务中使用时jedis的使用不能影响正常的业务逻辑。