Redis--Jedis的使用

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集群的使用。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值