返回顶部
首页 > 资讯 > 精选 >SpringBoot+Mybatis项目中如何使用Redis做Mybatis的二级缓存
  • 511
分享到

SpringBoot+Mybatis项目中如何使用Redis做Mybatis的二级缓存

springbootredismybatis 2023-05-30 19:05:20 511人浏览 八月长安
摘要

这篇文章给大家分享的是有关SpringBoot+mybatis项目中如何使用Redis做Mybatis的二级缓存的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。介绍使用mybatis时可以使用二级缓存提高查询速度,

这篇文章给大家分享的是有关SpringBoot+mybatis项目中如何使用Redis做Mybatis的二级缓存的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

介绍

使用mybatis时可以使用二级缓存提高查询速度,进而改善用户体验。

使用Redis做mybatis的二级缓存可是内存可控<如将单独的服务器部署出来用于二级缓存>,管理方便。

在pom.xml文件中引入redis依赖

<dependency>  <groupId>org.springframework.boot</groupId>  <artifactId>spring-boot-starter-data-redis</artifactId></dependency>

在application.properties配置文件中进行redis的配置

## Redis spring.redis.database=0spring.redis.host=172.16.3.123spring.redis.port=6379spring.redis.passWord=spring.redis.pool.max-active=8spring.redis.pool.max-wait=-1spring.redis.pool.max-idle=8spring.redis.pool.min-idle=0spring.redis.timeout=0

创建cache包,然后创建两个类,一个ApplicationContextHolder实现ApplicationContextAware接口,具体内容如下

package com.ruijie.SpringBootandRedis.cache;import org.springframework.beans.BeansException;import org.springframework.context.ApplicationContext;import org.springframework.context.ApplicationContextAware;import org.springframework.stereotype.Component;@Componentpublic class ApplicationContextHolder implements ApplicationContextAware {  private static ApplicationContext applicationContext;  @Override  public void setApplicationContext(ApplicationContext ctx) throws BeansException {    applicationContext = ctx;  }    public static ApplicationContext getApplicationContext() {    return applicationContext;  }    public static <T> T getBean(Class<T> clazz) {    return applicationContext.getBean(clazz);  }    public static <T> T getBean(String name) {    return (T) applicationContext.getBean(name);  }}

创建RedisCache类实现Cache接口,具体内容如下:

package com.ruijie.SpringBootandRedis.cache;import org.apache.ibatis.cache.Cache;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.data.redis.core.RedisCallback;import org.springframework.data.redis.core.RedisTemplate;import org.springframework.data.redis.core.ValueOperations;import java.util.concurrent.TimeUnit;import java.util.concurrent.locks.ReadWriteLock;import java.util.concurrent.locks.ReentrantReadWriteLock;public class RedisCache implements Cache {  private static final Logger logger = LoggerFactory.getLogger(RedisCache.class);  private final ReadWriteLock readWriteLock = new ReentrantReadWriteLock();  private final String id; // cache instance id  private RedisTemplate redisTemplate;  private static final long EXPIRE_TIME_IN_MINUTES = 30; // redis过期时间  public RedisCache(String id) {    if (id == null) {      throw new IllegalArgumentException("Cache instances require an ID");    }    this.id = id;  }  @Override  public String getId() {    return id;  }    @Override  public void putObject(Object key, Object value) {    try {      RedisTemplate redisTemplate = getRedisTemplate();      ValueOperations opsForValue = redisTemplate.opsForValue();      opsForValue.set(key, value, EXPIRE_TIME_IN_MINUTES, TimeUnit.MINUTES);      logger.debug("Put query result to redis");    }    catch (Throwable t) {      logger.error("Redis put failed", t);    }  }    @Override  public Object getObject(Object key) {    try {      RedisTemplate redisTemplate = getRedisTemplate();      ValueOperations opsForValue = redisTemplate.opsForValue();      logger.debug("Get cached query result from redis");      System.out.println("****"+opsForValue.get(key).toString());      return opsForValue.get(key);    }    catch (Throwable t) {      logger.error("Redis get failed, fail over to db", t);      return null;    }  }    @Override  @SuppressWarnings("unchecked")  public Object removeObject(Object key) {    try {      RedisTemplate redisTemplate = getRedisTemplate();      redisTemplate.delete(key);      logger.debug("Remove cached query result from redis");    }    catch (Throwable t) {      logger.error("Redis remove failed", t);    }    return null;  }    @Override  public void clear() {    RedisTemplate redisTemplate = getRedisTemplate();    redisTemplate.execute((RedisCallback) connection -> {      connection.flushDb();      return null;    });    logger.debug("Clear all the cached query result from redis");  }    @Override  public int getSize() {    return 0;  }  @Override  public ReadWriteLock getReadWriteLock() {    return readWriteLock;  }  private RedisTemplate getRedisTemplate() {    if (redisTemplate == null) {      redisTemplate = ApplicationContextHolder.getBean("redisTemplate");    }    return redisTemplate;  }}

实体类中要实现Serializable接口,并且要声明序列号

private static final long serialVersionUID = -2566441764189220519L;

开启Mybatis的二级缓存

在pom.xml配置文件中配置

mybatis.configuration.cache-enabled=true

在mapper接口中加入

@CacheNamespace(implementation=(com.demo.testdemo.cache.RedisCache.class))

感谢各位的阅读!关于“SpringBoot+Mybatis项目中如何使用Redis做Mybatis的二级缓存”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

--结束END--

本文标题: SpringBoot+Mybatis项目中如何使用Redis做Mybatis的二级缓存

本文链接: https://lsjlt.com/news/220355.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • SpringBoot+Mybatis项目中如何使用Redis做Mybatis的二级缓存
    这篇文章给大家分享的是有关SpringBoot+Mybatis项目中如何使用Redis做Mybatis的二级缓存的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。介绍使用mybatis时可以使用二级缓存提高查询速度,...
    99+
    2023-05-30
    springboot redis mybatis
  • 如何利用Redis作为Mybatis的二级缓存
    目录前言要优雅就选择MyBATis-PlusRedis配置自定义Mybatis缓存测试缓存命中率(Cache Hit Ratio)一级缓存和二级缓存什么时候该开启二级缓存前言 今天在开发时发现一个奇怪的问题,我手动改完数...
    99+
    2022-08-11
    利用Redis作为Mybatis二级缓存 RedisMybatis二级缓存
  • springboot+mybatis+redis 二级缓存问题实例详解
    前言什么是mybatis二级缓存?二级缓存是多个sqlsession共享的,其作用域是mapper的同一个namespace。即,在不同的sqlsession中,相同的namespace下,相同的sql语句,并且sql模板中参数也相同的,会...
    99+
    2023-05-30
    spring boot mybatis
  • 使用MyBatis如何实现一级缓存与二级缓存
    这期内容当中小编将会给大家带来有关使用MyBatis如何实现一级缓存与二级缓存,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。MyBatis缓存我们知道,频繁的数据库操作是非常耗费性能的(主要是因为对于DB...
    99+
    2023-05-31
    mybatis 一级缓存 二级缓存
  • mybatis二级缓存如何开启
    MyBatis的二级缓存默认是关闭的,如果需要开启二级缓存,可以按照以下步骤进行操作:1. 在MyBatis的配置文件中,添加以下配...
    99+
    2023-08-24
    mybatis
  • 使用Mybatis如何实现配置二级缓存
    这篇文章给大家介绍使用Mybatis如何实现配置二级缓存,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。Mybatis的二级缓存配置相当容易,要开启二级缓存,只需要在你的Mapper 映射文件中添加一行:<...
    99+
    2023-05-31
    mybatis 二级缓存
  • MyBatis中一级缓存与二级缓存的区别
    今天就跟大家聊聊有关MyBatis中一级缓存与二级缓存的区别,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。一级缓存一级缓存是SqlSession级别的缓存。在操作数据库时需要构造sq...
    99+
    2023-05-31
    mybatis 一级缓存 二级缓存
  • Mybatis中一级缓存、二级缓存的示例分析
    这篇文章主要介绍了Mybatis中一级缓存、二级缓存的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。Mybatis 为我们提供了一级缓存和二级缓存,可以通过下图来理解...
    99+
    2023-06-02
  • Java之Mybatis的二级缓存怎么使用
    本文小编为大家详细介绍“Java之Mybatis的二级缓存怎么使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“Java之Mybatis的二级缓存怎么使用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。缓存的概述...
    99+
    2023-07-05
  • Mybatis的一级缓存和二级缓存原理分析与使用
    目录Mybatis的一级缓存和二级缓存1 Mybatis如何判断两次查询是完全相同的查询2 二级缓存2.1 二级缓存配置2.2 二级缓存特点2.3 配置二级缓存2.4 测试Mybat...
    99+
    2024-04-02
  • 深入浅析MyBatis中的一级缓存与二级缓存
    本篇文章给大家分享的是有关深入浅析MyBatis中的一级缓存与二级缓存,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。MyBatis缓存我们知道,频繁的数据库操作是非常耗费性能的...
    99+
    2023-05-31
    mybatis 二级缓存 一级缓存
  • Spring boot中mybatis的二级缓存怎么使用Redis集群进行替换
    这篇文章给大家介绍Spring boot中mybatis的二级缓存怎么使用Redis集群进行替换,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。1 . pom.xml添加相关依赖<parent> <...
    99+
    2023-05-31
    springboot mybatis redis
  • Springboot整合mybatis开启二级缓存的实现示例
    目录前言mybatis 一级缓存和二级缓存的概念pom引入依赖application.properties 文件配置mapper.xml 文件配置cache-ref完整示例代码踩坑参...
    99+
    2024-04-02
  • SpringBoot项目中使用redis缓存的方法步骤
    本文介绍了SpringBoot项目中使用redis缓存的方法步骤,分享给大家,具体如下:Spring Data Redis为我们封装了Redis客户端的各种操作,简化使用。 - 当Redis当做数据库或者消息队列来操作时,我们一般使用Red...
    99+
    2023-05-30
    spring boot redis
  • SpringBoot中怎么使用Redis做缓存
    在SpringBoot中使用Redis做缓存可以通过以下步骤实现: 添加依赖:首先在pom.xml文件中添加Spring Data...
    99+
    2024-04-09
    SpringBoot Redis
  • 在项目中使用redis做缓存的一些思路
    目录在项目中redis做缓存的一些思路首先,缓存的对象有三种本人走过的一些弯路为什么没用Redis做缓存使用Table作本地缓存使用Redis作缓存让我们来思考一下下面几个问题那么使...
    99+
    2024-04-02
  • SpringMVC Web项目如何使用SpringBoot和Mybatis实现
    SpringMVC Web项目如何使用SpringBoot和Mybatis实现?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。一、热身一个现实的场景是:当我们开发...
    99+
    2023-05-31
    springmvc web springboot mybatis
  • 如何开发redis的二级缓存
    开发redis二级缓存的示例:redis二级缓存的实现,主要是重写了Cache.java的方法,代码:public class  implements Cache {  ...
    99+
    2024-04-02
  • mybatis-plus如何禁用一级缓存的方法
    前言 用过mybatis-plus的朋友可能会知道,mybatis-plus提供了多租户插件的功能,这个功能可以让开发人员不用手动写租户语句,由该插件自动帮你加上租户语句。今天的素...
    99+
    2024-04-02
  • 浅谈redis缓存在项目中的使用
    背景 Redis 是一个开源的内存数据结构存储系统。 可以作为数据库、缓存和消息中间件使用。 支持多种类型的数据结构。 Redis 内置了 复制(replication),LUA脚...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作