`

spring配置jedisPool

 
阅读更多
JedisCache
import java.io.IOException;
import java.util.Set;

import org.springframework.beans.factory.InitializingBean;
import org.springframework.util.Assert;

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;

import com.my.utils.serialization.KryoSerializationUtils;

public class JedisCache implements InitializingBean {

    private JedisPool jedisPool;

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

    public void putObject(String key, Object object) {
        Jedis jedis = null;
        try {
            jedis = jedisPool.getResource();
            jedis.set(key.getBytes(), KryoSerializationUtils.serialize(object));
        }
        catch (Exception ex) {
            handleException(ex, jedisPool, jedis);
        }
        finally {
            if (jedis != null && jedis.isConnected()) {
                jedisPool.returnResource(jedis);
            }
        }
    }

    public void putObject(String key, Object object, int expirationInSeconds) {
        Jedis jedis = null;
        try {
            jedis = jedisPool.getResource();
            jedis.setex(key.getBytes(), expirationInSeconds, KryoSerializationUtils.serialize(object));
        }
        catch (Exception ex) {
            handleException(ex, jedisPool, jedis);
        }
        finally {
            if (jedis != null && jedis.isConnected()) {
                jedisPool.returnResource(jedis);
            }
        }
    }

    public Object getObject(String key) {
        Jedis jedis = null;
        try {
            jedis = jedisPool.getResource();
            return (Object) KryoSerializationUtils.deserialize(jedis.get(key.getBytes()));
        }
        catch (Exception ex) {
            handleException(ex, jedisPool, jedis);
        }
        finally {
            if (jedis != null && jedis.isConnected()) {
                jedisPool.returnResource(jedis);
            }
        }
        return null;
    }

    public void removeObject(String key) {
        Jedis jedis = null;
        try {
            jedis = jedisPool.getResource();
            jedis.del(key.getBytes());
        }
        catch (Exception ex) {
            handleException(ex, jedisPool, jedis);
        }
        finally {
            if (jedis != null && jedis.isConnected()) {
                jedisPool.returnResource(jedis);
            }
        }
    }

    public boolean exists(String key) {
        Jedis jedis = null;
        try {
            jedis = jedisPool.getResource();
            return jedis.exists(key.getBytes());
        }
        catch (Exception ex) {
            handleException(ex, jedisPool, jedis);
        }
        finally {
            if (jedis != null && jedis.isConnected()) {
                jedisPool.returnResource(jedis);
            }
        }
        return false;
    }

    public long expire(String key, int expirationInSeconds) {
        Jedis jedis = null;
        try {
            jedis = jedisPool.getResource();
            return jedis.expire(key.getBytes(), expirationInSeconds);
        }
        catch (Exception ex) {
            handleException(ex, jedisPool, jedis);
        }
        finally {
            if (jedis != null && jedis.isConnected()) {
                jedisPool.returnResource(jedis);
            }
        }
        return 0L;
    }

    public Set<String> keys(final String pattern) {
        Jedis jedis = null;
        try {
            jedis = jedisPool.getResource();
            return jedis.keys(pattern);
        }
        catch (Exception ex) {
            handleException(ex, jedisPool, jedis);
        }
        finally {
            if (jedis != null && jedis.isConnected()) {
                jedisPool.returnResource(jedis);
            }
        }
        return null;
    }

    /**
     * 运行时异常,IO异常,销毁jedis对象
     *
     * @param ex
     * @param jedisPool
     * @param jedis
     */
    private void handleException(Exception ex, JedisPool jedisPool, Jedis jedis) {
        if (jedis == null)
            throw new NullPointerException("jedis is null, please check the redis server.");
        if (ex instanceof IOException) {
            jedisPool.returnBrokenResource(jedis); //销毁该对象
        }
    }

    @Override
    public void afterPropertiesSet() throws Exception {
        Assert.notNull(jedisPool);
    }
}




application-bean.xml

<util:properties id="redisProps" location="#{T(java.lang.System).getProperty('config.local') != null ? 'classpath:redis.properties' : 'file:////nfs/toc/redis.properties'}"/>
    <bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
        <property name="maxTotal" value="#{redisProps['${profiles.active}.redis.maxTotal']}"/> <!-- 控制一个pool可分配多少个jedis实例 -->
        <property name="maxIdle" value="#{redisProps['${profiles.active}.redis.maxIdle']}" />   <!-- 控制一个pool最多有多少个状态为idle(空闲)的jedis实例 -->
        <property name="maxWaitMillis" value="#{redisProps['${profiles.active}.redis.maxWaitMillis']}" />  <!-- 表示当borrow一个jedis实例时,最大的等待时间,如果超过等待时间,则直接抛出JedisConnectionException -->
        <property name="testOnBorrow" value="#{redisProps['${profiles.active}.redis.testOnBorrow']}" /> <!-- 在borrow一个jedis实例时,是否提前进行validate操作;如果为true,则得到的jedis实例均是可用的 -->
    </bean>
    <bean id="jedisPool" class="redis.clients.jedis.JedisPool" destroy-method="destroy">
        <constructor-arg name="poolConfig" ref="jedisPoolConfig" />  
        <constructor-arg name="host" value="#{redisProps['${profiles.active}.redis.server.host']}" />  
        <constructor-arg name="port" value="#{redisProps['${profiles.active}.redis.server.port']}" />  
    </bean>
    <bean id="jedisCache" class="com.my.cache.redis.JedisCache">
        <property name="jedisPool" ref="jedisPool"/>
    </bean>
分享到:
评论

相关推荐

    dubbo,redis_pool,springMVC(可用在wind上运行)

    一个java项目和两个web项目,实现dubbo的分布式接口和调用,配置了redispool池和jedis的调用,整个项目采用spring整合,aop记录日志;

    redis集成spring jar包以及配置文件

    redis-context.xml redis和spring配置,需要引用到自己项目的spring配置文件里面 redis.properties redis的配置项,ip一级连接池参数,注意:redis默认没有密码,所以我的spring配置文件把密码注释掉了,如果有密码...

    SpringMVC整合Redis集群

    项目由maven构建,使用springMVC整合了Redis的集群,发布到tomcat中,访问http://localhost:8080/SpringRedisCluster/redis/hello.do测试即可,前提是配好了redis的集群。

    玩转 SpringBoot 2.x 之 快速集成 Jedis客户端(普通版)

    前言 Java 开发 一般会选择 Jedis 客户端来进行 Redis...添加 Jedis 客户端配置类,将JedisPoolConfig和 JedisPool 注入Spring的上下文中。具体代码如下: @Configuration public class JedisConfig { @Value("${redis

    吴天雄--Redis个人笔记.doc

    Redis个人笔记,篇幅65页,共计...十一、Java客户端Jedis(jedis连接池:JedisPool),十二、redis集群搭建(详细步骤、伪集群和实际搭建集群、附有截图),十三、spring集成redis(详细步骤、配置文件、附有截图)

    springboot-demo:springboot演示

    S:切换本地redis后,配置应改成spring.redis.host = 127.0.0.1 spring.redis.port = 6379 spring.redis.password = jincong spring.redis.timeout = 2000 spring.redis.jedis.pool.max -active = 10 spring.redis....

    Java版水果管理系统源码-java:Java

    就是对JedisPool资源获取释放的封装. obase-config: 实现PropertySourcePlaceholderConfiguer的功能, 并支持Redis, Mysql动态配置定期更新功能. 另外, 还支持配置项的AES128加密, 避免你的配置项明文存放. obase-...

    Spring Boot整合Redis

    在Spring Boot工程的pom文件中...在application.yml配置文件里加入关于redis的配置 spring: redis: host: localhost port: 6379 password: database: 0 jedis: pool: max-idle: 500 max-active: 8 max-wait:

    SpringMVC-Mybatis-Shiro-redis-master 权限集成缓存中实例

    &lt;bean id="jedisPool" class="redis.clients.jedis.JedisPool"&gt; &lt;!-- 这种 arguments 构造的方式,之前配置有缺点。 这里之前的配置有问题,因为参数类型不一致,有时候jar和环境的问题,导致参数...

    magnet-system:一个管理磁力和漫画爬虫的springboot项目(kb磁力后端)

    kb磁力后端 该springboot项目用于存储磁力链接以及进行用户管理 使用技术 spring、springmvc、mybatis、redis、springboot、jwt 功能介绍 ... jedis: pool: max-active: 8 max-wait: -1 max-idle: 500

    详解SSH框架和Redis的整合

    commons-pool2-2.4.2.jar、jedis-2.3.1.jar、spring-data-redis-1.3.4.RELEASE.jar。 2. Redis配置文件 在src文件夹下面新建一个redis.properties文件,设置连接Redis的一些属性。 redis.host=127.0.0.1 redis.port...

Global site tag (gtag.js) - Google Analytics