Redis--Jedis的使用

来源:互联网 发布:mac 查看硬盘内存 编辑:程序博客网 时间:2024/05/20 14:23

1. jedis的测试代码

public class RedisClient {    @Test    //使用Jedis连接redis服务器    public void jedisClient(){        Jedis jedis = new Jedis("192.168.83.128",6379);        jedis.set("s3", "333");        String result = jedis.get("s3");        System.out.println(result);        jedis.close();    }    @Test    //使用JedisPool连接redis服务器    public void jedisPool(){        JedisPool pool = new JedisPool("192.168.83.128",6379);        Jedis jedis = pool.getResource();        String result = jedis.get("s1");        System.out.println(result);        jedis.close();        pool.close();    }    @Test    public void jedisPool_Spring(){        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");        JedisPool jedisPool = context.getBean("jedisPool", JedisPool.class);        Jedis jedis = jedisPool.getResource();        jedis.set("s1", "111");        String result = jedis.get("s1");        System.out.println(result);        jedis.close();        jedisPool.close();    }    @Test    public void jedisCluster(){        Set<HostAndPort> nodes = new HashSet();        nodes.add(new HostAndPort("192.168.83.128",7001));        nodes.add(new HostAndPort("192.168.83.128",7002));        nodes.add(new HostAndPort("192.168.83.128",7003));        nodes.add(new HostAndPort("192.168.83.128",7004));        nodes.add(new HostAndPort("192.168.83.128",7005));        nodes.add(new HostAndPort("192.168.83.128",7006));        JedisCluster cluster = new JedisCluster(nodes);        cluster.set("ss","123");        String result = cluster.get("ss");        System.out.println(result);        cluster.close();    }}

2. Spring整合Jedis

2.1 整合JedisPool

<!-- 连接池配置 -->    <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="false" />        <!-- 在空闲时检查有效性, 默认false -->        <property name="testWhileIdle" value="true" />        <!-- 连接耗尽时是否阻塞, false报异常,ture阻塞直到超时, 默认true -->        <property name="blockWhenExhausted" value="false" />    </bean>    <!-- redis单机 通过连接池 -->    <bean id="jedisPool" class="redis.clients.jedis.JedisPool"        destroy-method="close">        <constructor-arg name="poolConfig" ref="jedisPoolConfig" />        <constructor-arg name="host" value="192.168.242.130" />        <constructor-arg name="port" value="6379" />    </bean>

2.2 整合JedisCluster

<bean id="jedisCluster" class="redis.clients.jedis.JedisCluster">    <constructor-arg index="0">        <set>            <bean class="redis.clients.jedis.HostAndPort">                <constructor-arg index="0" value="192.168.101.3"></constructor-arg>                <constructor-arg index="1" value="7001"></constructor-arg>            </bean>            <bean class="redis.clients.jedis.HostAndPort">                <constructor-arg index="0" value="192.168.101.3"></constructor-arg>                <constructor-arg index="1" value="7002"></constructor-arg>            </bean>            <bean class="redis.clients.jedis.HostAndPort">                <constructor-arg index="0" value="192.168.101.3"></constructor-arg>                <constructor-arg index="1" value="7003"></constructor-arg>            </bean>            <bean class="redis.clients.jedis.HostAndPort">                <constructor-arg index="0" value="192.168.101.3"></constructor-arg>                <constructor-arg index="1" value="7004"></constructor-arg>            </bean>            <bean class="redis.clients.jedis.HostAndPort">                <constructor-arg index="0" value="192.168.101.3"></constructor-arg>                <constructor-arg index="1" value="7005"></constructor-arg>            </bean>            <bean class="redis.clients.jedis.HostAndPort">                <constructor-arg index="0" value="192.168.101.3"></constructor-arg>                <constructor-arg index="1" value="7006"></constructor-arg>            </bean>        </set>    </constructor-arg>    <constructor-arg index="1" ref="jedisPoolConfig"></constructor-arg></bean>

3技巧

step1.将Jedis中通用的方法抽取到一个接口中

public interface JedisClient {      public String set(String key, String value);      public String get(String key);      public Long hset(String key, String item, String value);      public String hget(String key, String item);      public Long incr(String key);      public Long decr(String key);      public Long expire(String key, int second);      public Long ttl(String key);      public Long hdel(String key,String item);}

step2.使用JedisPool去实现这个接口

public class JedisClientSingle implements JedisClient{    @Autowired    private JedisPool jedisPool;    @Override    public String set(String key, String value) {        Jedis jedis = jedisPool.getResource();        String string = jedis.set(key, value);        jedis.close();        return string;    }    public String get(String key) {        Jedis jedis = jedisPool.getResource();        String string = jedis.get(key);        jedis.close();        return string;    }    @Override    public Long hset(String key, String item, String value) {        Jedis jedis = jedisPool.getResource();        Long hset = jedis.hset(key, item, value);        jedis.close();        return hset;    }    @Override    public String hget(String key, String item) {        Jedis jedis = jedisPool.getResource();        String hget = jedis.hget(key, item);        jedis.close();        return hget;    }    public Long hdel(String key,String item){        Jedis jedis = jedisPool.getResource();        Long hdel = jedis.hdel(key, item);        jedis.close();        return hdel;    }    @Override    public Long incr(String key) {        Jedis jedis = jedisPool.getResource();        Long incr = jedis.incr(key);        jedis.close();        return incr;    }    @Override    public Long decr(String key) {        Jedis jedis = jedisPool.getResource();        Long decr = jedis.decr(key);        jedis.close();        return decr;    }    @Override    public Long expire(String key, int second) {        Jedis jedis = jedisPool.getResource();        Long expire = jedis.expire(key, second);        jedis.close();        return expire;    }    @Override    public Long ttl(String key) {        Jedis jedis = jedisPool.getResource();        Long ttl = jedis.ttl(key);        jedis.close();        return ttl;    }}

step3.用JedisCluster去实现这个接口

public class JedisClientCluster implements JedisClient {    @Autowired    private JedisCluster jedisCluster;    @Override    public String set(String key, String value) {        String set = jedisCluster.set(key, value);        return set;    }    @Override    public String get(String key) {        String string = jedisCluster.get(key);        return string;    }    @Override    public Long hset(String key, String item, String value) {        Long hset = jedisCluster.hset(key, item, value);        return hset;    }    @Override    public String hget(String key, String item) {        String hget = jedisCluster.hget(key, item);        return hget;    }    @Override    public Long hdel(String key, String item) {        Long hdel = jedisCluster.hdel(key, item);        return hdel;    }    @Override    public Long incr(String key) {        Long incr = jedisCluster.incr(key);        return incr;    }    @Override    public Long decr(String key) {        Long decr = jedisCluster.decr(key);        return decr;    }    @Override    public Long expire(String key, int second) {        Long expire = jedisCluster.expire(key, second);        return expire;    }    @Override    public Long ttl(String key) {        Long ttl = jedisCluster.ttl(key);        return ttl;    }}

<bean id="jedisClient" class="com.taotao.order.dao.JedisClientSingle"></bean>
<bean id="jedisClient" class="com.taotao.order.dao.JedisClientCluster"></bean>
</beans>

使用时,两个Bean二选一即可。

上述过程可以体现了JedisClient 接口多态性。即无需改变JedisClientAPI的使用情况,可通过配置Bean的方式随意切换单个redis和redis集群的使用。