ssm+redis整合之redis连接池注入

package com.tp.soft.redis;

import javax.annotation.Resource;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;

public class RedisCacheTransfer {

    @Autowired
    public void setJedisConnectionFactory(JedisConnectionFactory jedisConnectionFactory) {
        RedisCacheAn.setJedisConnectionFactory(jedisConnectionFactory);
    }

}

spring-redis注入

<bean id="jedisConnectionFactory" class="com.tp.soft.redis.RedisCacheTransfer">
        <property name="jedisConnectionFactory" ref="connectionFactory"></property>
    </bean>

二级缓存引入类

package com.tp.soft.redis;

import java.util.concurrent.locks.ReadWriteLock;
import java.util.concurrent.locks.ReentrantReadWriteLock;

import org.apache.ibatis.cache.Cache;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.connection.jedis.JedisConnection;
import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;
import org.springframework.data.redis.serializer.JdkSerializationRedisSerializer;
import org.springframework.data.redis.serializer.RedisSerializer;

/*
 * 使用第三方缓存服务器,处理二级缓存
 */
public class RedisCacheAn implements Cache {
    private final ReadWriteLock readWriteLock = new ReentrantReadWriteLock();

    private String id;

    private static JedisConnectionFactory jedisConnectionFactory;

    public RedisCacheAn(final String id) {
        if (id == null) {
            throw new IllegalArgumentException("Cache instances require an ID");
        }
        this.id = id;

    }

    public String getId() {
        return this.id;
    }

    public void putObject(Object key, Object value) {
        JedisConnection conn = null;
        try{
            conn = jedisConnectionFactory.getConnection();
            RedisSerializer<Object> serializer = new JdkSerializationRedisSerializer();
            conn.set(serializer.serialize(key), serializer.serialize(value));
        }catch (Exception e) {
            e.printStackTrace();
        }finally{
            if(conn != null){
                conn.close();
            }
        }

    }

    public Object getObject(Object key) {
        JedisConnection conn = null;
        Object res = null;
        try{
            conn = jedisConnectionFactory.getConnection();
            RedisSerializer<Object> serializer = new JdkSerializationRedisSerializer();
            byte[] bs = conn.get(serializer.serialize(key));
            res = serializer.deserialize(bs);
        }catch (Exception e) {
            e.printStackTrace();
        }finally{
            if(conn != null){
                conn.close();
            }
        }
        return res;
    }

    public Object removeObject(Object key) {
        JedisConnection conn = null;
        Object res = null;
        try{
            conn = jedisConnectionFactory.getConnection();
            RedisSerializer<Object> serializer = new JdkSerializationRedisSerializer();
            conn.expire(serializer.serialize(key), 0);
        }catch (Exception e) {
            e.printStackTrace();
        }finally{
            if(conn != null){
                conn.close();
            }
        }
        return res;

    }

    public void clear() {
        JedisConnection conn = null;
        try{
            conn = jedisConnectionFactory.getConnection();
            conn.flushDb();
            conn.flushAll();
        }catch (Exception e) {
            e.printStackTrace();
        }finally{
            if(conn != null){
                conn.close();
            }
        }
    }

    public int getSize() {
        JedisConnection conn = null;
        int res = 0;
        try{
            conn = jedisConnectionFactory.getConnection();
            res = Integer.parseInt(conn.dbSize().toString());
        }catch (Exception e) {
            e.printStackTrace();
        }finally{
            if(conn != null){
                conn.close();
            }
        }
        return res;
    }

    public ReadWriteLock getReadWriteLock() {
        return readWriteLock;
    }

    public static void setJedisConnectionFactory(JedisConnectionFactory jedisConnectionFactory) {
        RedisCacheAn.jedisConnectionFactory = jedisConnectionFactory;
    }

}
时间: 2024-08-26 08:28:51

ssm+redis整合之redis连接池注入的相关文章

SpringBoot整合Druid数据连接池

SpringBoot整合Druid数据连接池 Druid是什么? Druid是Alibaba开源的的数据库连接池.Druid能够提供强大的监控和扩展功能. 在哪里下载druid maven中央仓库: http://central.maven.org/maven2/com/alibaba/druid/ 怎么获取Druid的源码 Druid是一个开源项目,源码托管在github上,源代码仓库地址是 https://github.com/alibaba/druid.同时每次Druid发布正式版本和快照

Hibernate整合C3P0实现连接池&lt;转&gt;

Hibernate整合C3P0实现连接池 Hibernate中可以使用默认的连接池,无论功能与性能都不如C3PO(网友反映,我没有测试过),C3P0是一个开源的JDBC连接池,它实 现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展.目前使用它的开源项目有Hibernate,Spring等. C3P0是一个易于使用JDBC3规范和JDBC2可选的扩展定义的功能增强,使传统的JDBC驱动程序“enterprise-ready”库. 特别是C3P0提供了一些有用的服务:适应传统的基于

Java与redis交互、Jedis连接池JedisPool

Java与redis交互比较常用的是Jedis. 先导入jar包: commons-pool2-2.3.jar jedis-2.7.0.jar 基本使用: public class RedisTest1 { public static void main(String[] args) { Jedis jedis = new Jedis("localhost",6379); jedis.set("username","chichung"); jed

ssm+redis整合(通过aop自定义注解方式)

此方案借助aop自定义注解来创建redis缓存机制. 1.创建自定义注解类 package com.tp.soft.common.util; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; @Target(ElementTyp

redis 连接池

redis是一个key-value存储系统,和memcached类似,支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合).zset(sorted set-有序集合)和hash(哈希类型).这些数据类型都支持push/pop.add/remove及取交集和差集及更丰富的操作,而且这些操作都说原子性的.在此基础上,redis支持各种不同的方式排序.与memcached一样,为了保证效率,数据都是缓存在内存中.区别的是redis会周期性的把更新的数据写入磁盘

python 里的 redis 连接池的原理

python设置redis连接池的好处: 通常情况下,需要连接redis时,会创建一个连接,基于这个连接进行redis操作,操作完成后去释放,正常情况下,这是没有问题的,但是并发量较高的情况下,频繁的连接创建和释放对性能会有较高的影响,于是连接池发挥作用. 连接池的原理:‘预先创建多个连接,当进行redis操作时,直接获取已经创建好的连接进行操作.完成后,不会释放这个连接,而是让其返回连接池,用于后续redis操作!这样避免连续创建和释放,从而提高了性能! import redis pool =

Redis Java连接池调研

Redis Java连接池调研 线上服务,由于压力大报错RedisTimeOut,但是需要定位到底问题出现在哪里? 查看Redis慢日志,slowlog get 发现耗时最大的也是11000us也就是11ms 暂时没发现特别慢的查询,所以问题转移到了 应用和redis中间衔接的连接池pool,所以需要打印pool的相关指标 类LettucePoolingConnectionProvider 的 pools.values() 就是连接池 连接池 pool有 getNumActive和getNumI

SSM框架下的redis缓存

基本SSM框架搭建:http://www.cnblogs.com/fuchuanzhipan1209/p/6274358.html 配置文件部分: 第一步:加入jar包 pom.xml <!-- spring-redis实现 --> <dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-redis</artifactId> &l

springboot整合mybatis,redis,代码(一)

一 搭建项目,代码工程结构 使用idea或者sts构建springboot项目 二  数据库sql语句 SQLyog Ultimate v12.08 (64 bit) MySQL - 5.7.14-log ********************************************************************* */ /*!40101 SET NAMES utf8 */; create table `person` ( `id` int (11), `name`