Redis(二)------采坑之路

5 篇文章 0 订阅
4 篇文章 0 订阅

前言

首先我用的是JAVA语言,如果您也遇到了与我类似的问题,即使用JedisPool的时候出现Could not get a resource from the pool类似的问题,请看下去!该实例保证你不会出现该错误!

正文

依赖

		<dependency>
            <groupId>redis.clients</groupId>
            <artifactId>jedis</artifactId>
            <version>3.0.1</version>
            <type>jar</type>
        </dependency>

配置

spring-config.xml

    <!-- 配置redis数据库连接池 -->
    <bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
        <property name="maxTotal" value="${redis.pool.maxTotal}" />
        <property name="maxIdle" value="${redis.pool.maxIdle}" />
        <property name="minIdle" value="${redis.pool.minIdle}" />
        <property name="maxWaitMillis" value="${redis.pool.maxWait}" />
        <property name="testOnBorrow" value="${redis.pool.testOnBorrow}" />
        <property name="testOnReturn" value="${redis.pool.testOnReturn}" />
        <property name="testWhileIdle" value="${redis.pool.testWhileIdle}" />
        <property name="timeBetweenEvictionRunsMillis" value="${redis.pool.timeBetweenEvictionRunsMillis}" />
    </bean>

    <!-- 配置redis共享连接池,业务层主要通过该bean访问redis服务器 -->
    <bean id="jedisPool" class="redis.clients.jedis.JedisPool">
        <constructor-arg index="0" ref="jedisPoolConfig" />
        <constructor-arg index="1" value="${redis.host}" type="java.lang.String"/>
        <constructor-arg index="2" value="${redis.port}" type="int"/>
        <constructor-arg index="3" value="${redis.pool.timeout}" type="int"/>
    </bean>

    <bean id="redisClient" class="com.lk.sydn.mahout.cache.RedisUtil">
        <property name="jedisPool" ref="jedisPool"/>
    </bean>

redis.properties

#最大分配的对象数(如果超过最大idel状态的对象数时,池中会继续增加知道达到该最大值)
redis.pool.maxTotal=2000
#最大能够保持idel状态的对象数
redis.pool.maxIdle=200
#最小空闲的对象数。2.5.1以上版本有效
redis.pool.minIdle=100
#当池内没有返回对象时,最大等待时间
redis.pool.maxWait=50000
#当调用borrow Object方法时,是否进行有效性检查
redis.pool.testOnBorrow=true
#当调用return Object方法时,是否进行有效性检查
redis.pool.testOnReturn=true
#向调用者输出“链接”对象时,是否检测它的空闲超时
redis.pool.testWhileIdle=true
#“空闲链接”检测线程,检测的周期,毫秒数。如果为负值,表示不运行“检测线程”。默认为-1
redis.pool.timeBetweenEvictionRunsMillis=30000
#获取池中对象时的超时时间
redis.pool.timeout=50000

代码

Java工具类

package com.xxx.yyy;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;

/**
 * Created by Silence on 2018/4/13.
 */
public class RedisUtil {

    private Logger logger = LoggerFactory.getLogger(RedisUtil.class);

    @Autowired
    private JedisPool jedisPool;

    public Jedis getRedisClient() {

        Jedis jedis = null;
        try {
            jedis = jedisPool.getResource();
        } catch (Exception ex) {
            logger.error("RedisUtil Get Jedis Error!", ex);
        }

        return jedis;

    }

    /**
     * 设置单个值
     *
     * @param key
     * @param value
     */
    public void set(String key, String value) {

        Jedis jedis = getRedisClient();
        if (jedis == null) {
            logger.error("RedisUtil No Available Jedis!");
            return;
        }
        try {
            jedis.set(key, value);
        } catch (Exception ex) {
            logger.error("RedisUtil Set Error!", ex);
        } finally {
            //将用完的实例还回到池中,好借好还,再借不难
            jedis.close();
        }

    }

    /**
     * 设置单个值(附带有效)
     * @param key
     * @param value
     * @param seconds
     */
    public void setWithExpire(String key, String value, int seconds) {

        Jedis jedis = getRedisClient();
        if (jedis == null) {
            logger.error("RedisUtil No Available Jedis!");
            return;
        }
        try {
            jedis.set(key, value);
            jedis.expire(key, seconds);
        } catch (Exception ex) {
            logger.error("RedisUtil SetWithExpire Error!", ex);
        } finally {
            //将用完的实例还回到池中,好借好还,再借不难
            jedis.close();
        }


    }

    /**
     * 获取单个值
     * @param key
     * @return
     */
    public String get(String key) {

        String result = null;

        Jedis jedis = getRedisClient();
        if (jedis == null) {
            logger.error("RedisUtil No Available Jedis!");
            return null;
        }
        try {
            result = jedis.get(key);
        } catch (Exception ex) {
            logger.error("RedisUtil Get Error!", ex);
        } finally {
            //将用完的实例还回到池中,好借好还,再借不难
            jedis.close();
        }

        return result;

    }

    public void setJedisPool(JedisPool jedisPool) {
        this.jedisPool = jedisPool;
    }

}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值