【redis】——jedis简单了解和使用

来源:互联网 发布:sql 字符串中有单引号 编辑:程序博客网 时间:2024/06/16 15:39

        使用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的使用不能影响正常的业务逻辑。

0 0