Redis+Spring+Mybatis的整合

1、 引入jar包

2、 实现Mybatis缓存接口

 public class RedisCache implements Cache {

  private final ReadWriteLock readWriteLock = new ReentrantReadWriteLock();

  private String id;

  private static JedisConnectionFactory jedisConnectionFactory;

  protected static Logger logger = LogManager.getLogger();

  public RedisCache(String id) {

  if (id == null) {

throw new IllegalArgumentException("Cache instances require an ID");

         }

     logger.debug("---------------------Mybatis RedisCache:id=" + id + "---------------------");

    this.id = id;

     }

 

     /**

      * 清除所有数据

    */

     @Override

    public void clear() {

         JedisConnection connection = null;

         try {

             connection = (JedisConnection) jedisConnectionFactory.getConnection();

             connection.flushAll();

         } catch (JedisConnectionException e) {

             e.printStackTrace();

         } finally {

             if (connection != null) {

               connection.close();

             }

        }

     }

 

     /**

     * @return

      */

     @Override

     public String getId() {

         return this.id;

     }

 

     /**

      * 得到指定key的 value

      * @param key

      * @return object

      */

     @Override

     public Object getObject(Object key) {

    

         Object result = null;

         JedisConnection connection = null;

        try {

            connection = (JedisConnection) jedisConnectionFactory.getConnection();

             result = SerializeUtil.unserialize(connection.get(SerializeUtil.serialize(key)));

             //result = SerializeUtil.unserialize(connection.hGet(RedisCache.this.id.toString().getBytes(), key.toString().getBytes()));

         } catch (JedisConnectionException e) {

             e.printStackTrace();

         } finally {

             if (connection != null) {

                 connection.close();

             }

         }

         return result;

     }

 

     /**

      * 得到当前db的key值

     * @return int

      */

     @Override

     public int getSize() {

         int result = 0;

         JedisConnection connection = null;

         try {

             connection = (JedisConnection) jedisConnectionFactory.getConnection();

             result = Integer.valueOf(connection.dbSize().toString());

 //            result = Integer.valueOf(connection.hGetAll(RedisCache.this.id.toString().getBytes()).size());

         } catch (JedisConnectionException e) {

             e.printStackTrace();

         } finally {

             if (connection != null) {

                 connection.close();

             }

         }

         return result;

     }

 

     /**

      * 写入 key-value

      * @param key

     * @param value

      */

     @Override

     public void putObject(Object key, Object value) {

         JedisConnection connection = null;

         try {

             logger.debug("------------------Redis Put Object:" + key.toString() + ":" + value.toString() + "-------------------");

             connection = (JedisConnection) jedisConnectionFactory.getConnection();

             connection.set(SerializeUtil.serialize(key), SerializeUtil.serialize(value));

 //            connection.hSet(RedisCache.this.id.toString().getBytes(),key.toString().getBytes(),SerializeUtil.serialize(value));

         } catch (JedisConnectionException e) {

             e.printStackTrace();

         } finally {

             if (connection != null) {

                 connection.close();

             }

         }

     }

 

     /**

     * 删除指定key的值

      * @param key

      * @return

     */

     @Override

     public Object removeObject(Object key) {

         JedisConnection connection = null;

         Object result = null;

         try {

             connection = (JedisConnection) jedisConnectionFactory.getConnection();

             result = connection.expire(SerializeUtil.serialize(key), 0);

             //或者  result = connection.del(SerializeUtil.serialize(key));

 //            result = connection.hDel(RedisCache.this.id.toString().getBytes(),key.toString().getBytes());

         } catch (JedisConnectionException e) {

             e.printStackTrace();

         } finally {

             if (connection != null) {

               connection.close();

            }

         }

         return result;

     }

 

     @Override

     public ReadWriteLock getReadWriteLock() {

         return this.readWriteLock;

     }

 

     /**

      * 注入jedisConnectionFactory

      * @param jedisConnectionFactory

      */

     public static void setJedisConnectionFactory(JedisConnectionFactory jedisConnectionFactory) {

         RedisCache.jedisConnectionFactory = jedisConnectionFactory;

     }

 }

3、   使用中间类解决RedisCache.jedisConnectionFactory的静态注入,从而使MyBatis实现第三方缓存

public class RedisCacheTransfer {

 

    @Autowired

    public void setJedisConnectionFactory(JedisConnectionFactory jedisConnectionFactory) {

        RedisCache.setJedisConnectionFactory(jedisConnectionFactory);

    }

}

 

<!-- 使用中间类解决RedisCache.jedisConnectionFactory的静态注入,从而使MyBatis实现第三方缓存 -->

    <bean id="redisCacheTransfer" class="org.xkp.util.RedisCacheTransfer">

        <property name="jedisConnectionFactory" ref="jedisConnFactory"/>

</bean>

4、使用Spring管理与redis的连接

<bean id="jedisConnFactory"

          class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">

        <property name="hostName" value="192.168.1.111"/>

        <property name="port" value="6379"/>

        <!--<property name="poolConfig" ref="poolConfig"/>-->

        <!--<constructor-arg ref="redisSentinelConfiguration"/>-->

        <property name="timeout" value="10000"/>

</bean>

5、在mapper映射文件中开启二级缓存

<cache type="org.xkp.util.RedisCache"/>

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值