Redis做Mybatis的二级缓存

Redis做Mybatis的二级缓存

基于spring boot项目的前提下,使用redis数据库做mybatis的二级缓存。

Redis做mybatis的二级缓存

作用提升速度,保证多台服务器访问同一数据库时不会崩
注意:保证本地有下载redis且已经打开,否则无法使用。
【本文只讲述了实现步骤,并没有原理讲解】

保证有导入mybatis依赖和Redis依赖


    org.mybatis.spring.boot
    mybatis-spring-boot-starter
    2.2.0


    org.springframework.boot
    spring-boot-starter-data-redis

创建cache包放入以下类

【记住:该类不可以注入bean,就是不能加注解@Bean】

//实现Mybatis的Cache接口
public class RedisMybatisCache implements Cache {   //注意这里Cache导入的是ibatis的cache

    private final String id;
    private static RedisTemplate template;

    //注意构造方法必须带一个String类型的参数接收id
    public RedisMybatisCache(String id){
        this.id = id;
    }

    //初始化时通过配置类将RedisTemplate给过来
    public static void setTemplate(RedisTemplate template) {
        RedisMybatisCache.template = template;
    }

    @Override
    public String getId() {
        return id;
    }

    @Override
    public void putObject(Object o, Object o1) {    //o就是Key,o1就是Value
        //这里直接向Redis数据库中丢数据即可,o就是Key,o1就是Value,60分钟为过期时间
        template.opsForValue().set(o, o1, 60, TimeUnit.MINUTES);
    }

    @Override
    public Object getObject(Object o) {
        //这里根据Key直接从Redis数据库中获取值即可
        return template.opsForValue().get(o);
    }

    @Override
    public Object removeObject(Object o) {
        //根据Key删除
        return template.delete(o);
    }

    @Override
    public void clear() {
        //由于template中没封装清除操作,只能通过connection来执行
                template.execute((RedisCallback) connection -> {
            //通过connection对象执行清空操作
            connection.flushDb();
            return null;
        });
    }

    @Override
    public int getSize() {
        //这里也是使用connection对象来获取当前的Key数量
        return template.execute(RedisServerCommands::dbSize).intValue();    //这里导的类是redis下的
    }
}

编写配置类config

@Configuration
public class MainConfiguration {
    @Resource
    RedisTemplate template;

    @PostConstruct
    public void init(){
        //把RedisTemplate给到RedisMybatisCache
        RedisMybatisCache.setTemplate(template);
    }
}

每个mapper上加入该注解

//只需要修改缓存实现类implementation为我们的RedisMybatisCache即可
@CacheNamespace(implementation = RedisMybatisCache.class)
@Mapper
public interface MainMapper {

    @Select("select name from student where sid = 1")
    String getSid();
}

每一个实体类实现该接口

(Redis存储对象时,是用序列化存储,所以select返回一个对象时会用到该接口)

@Data
public class Account implements Serializable {
    int id;
    String username;
    String password;
    String role;
}

本文来自博客园,作者:不吃紫菜,遵循CC 4.0 BY-SA版权协议,

转载请附上原文出处链接:https://www.cnblogs.com/buchizicai/p/16517243.html及本声明;

本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

Original: https://www.cnblogs.com/buchizicai/p/16517243.html
Author: 不吃紫菜
Title: Redis做Mybatis的二级缓存

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/684839/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • FHQtreap(我有个绝妙的理解方法,但课的时间不够[doge])

    会了FHQ,treap什么的就忘了吧…… #include using namespace std; struct FHQ { int v,w,size,l…

    技术杂谈 2023年6月21日
    095
  • 从OC角度思考OKR的底层逻辑

    原创不易,求分享、求一键三连 扩展阅读:什么是OKR OC:Organization Cultrue即组织文化,标题用OC纯粹为了装逼… ​自从接受公司文化建设工作后,…

    技术杂谈 2023年6月1日
    0118
  • 【翻译】Thymeleaf–SpringSecurity集成模块

    来源:thymeleaf/thymeleaf-extras-springsecurity自述文件 这是一个Thymeleaf附加模块,不是Thymeleaf核心的一部分(因此它有自…

    技术杂谈 2023年7月24日
    075
  • python 嵌入式打包【保姆级文图教程】

    python 嵌入式打包 python 嵌入式打包 嵌入式解决了什么问题? 什么是嵌入式? 如何安装嵌入式? 前往官网下载嵌入式 解压并配置嵌入式设置 如何安装新的模块 如何运行 …

    技术杂谈 2023年7月11日
    065
  • request.getSession(true/false)的区别

    【原文链接】:https://blog.tecchen.tech ,博文同步发布到博客园。由于精力有限,对文章的更新可能不能及时同步,请点击上面的原文链接访问最新内容。欢迎访问我的…

    技术杂谈 2023年7月11日
    063
  • 14. 构造二叉树

    title: 构造二叉树 , 看这一篇就足够! 思想:构造整棵树 = 根节点 + 构造左子树 + 构造右子树 📃 题目一描述 题目链接:从中序与后序遍历构造二叉树 🔔 解题思路 必…

    技术杂谈 2023年7月24日
    087
  • 5. `sklearn`下的线性回归

    以线性回归为例,介绍sklearn包进行机器学习的流程 本文以线性回归为例,介绍使用 sklearn进行机器学习的一般过程。 首先生成模拟数据 import numpy as np…

    技术杂谈 2023年7月10日
    071
  • Nginx

    2022-08-15 22:06:21 星期一2022-09-03 18:23:18 星期六 操作系统安装: centos7 mini版,修改网络配置文件,重启网络服务,查看ip命…

    技术杂谈 2023年7月11日
    066
  • tolua杂记

    1 字符串调用luaFunc :DoString public class CallLuaFunction : MonoBehaviour { private string scr…

    技术杂谈 2023年5月31日
    066
  • typora最后的免费版本

    需要的阿里云盘自取 「typora最后的免费版本」https://www.aliyundrive.com/s/p3Ci2gbgwYh点击链接保存,或者复制本段内容,打开「阿里云盘」…

    技术杂谈 2023年7月11日
    084
  • Swagger

    原文:https://www.cnblogs.com/Liu-xing-wu/p/14643839.html 学习目标: 了解Swagger的概念及作用 掌握在项目中集成Swagg…

    技术杂谈 2023年5月31日
    0115
  • 《鹿柴》王维

    《鹿柴》王维 空山不见人,但闻人语响。 返景入深林,复照青苔上。 posted @2022-08-01 08:20 郑瀚Andrew 阅读(503 ) 评论() 编辑 Origin…

    技术杂谈 2023年5月31日
    098
  • vue-admin-template组件前端,登录验证成功后,getInfo方法不调用

    先查看request.js中自定义状态码是否为自己的定义的成功状态码 这里的状态码该为自己的成功状态码 Original: https://www.cnblogs.com/antl…

    技术杂谈 2023年6月21日
    084
  • 更换 Kubernetes Storage Class 所使用的 NAS

    最近我们在 kubernetes 集群上部署 rabbitmq 时遇到一个场景,需要将 rabbitmq 使用的 persistent volume 从阿里云性能型 nas 切换为…

    技术杂谈 2023年5月31日
    084
  • 如何为visio扩展云服务图标

    404. 抱歉,您访问的资源不存在。 可能是网址有误,或者对应的内容被删除,或者处于私有状态。 代码改变世界,联系邮箱 contact@cnblogs.com 园子的商业化努力-困…

    技术杂谈 2023年7月25日
    075
  • 设计模式-桥接模式

    类型:结构型 目的:通过抽离出多个维度相互组合(聚合)来代替继承,简化系统。 话不多说,看个优化案例。 优化案例 现有系统中,对于画面窗口的边框有一套样式来控制是否有圆角。因为新的…

    技术杂谈 2023年7月11日
    066
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球