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/578712/

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

(0)

大家都在看

  • [编译] 8、在Linux下搭建 stm8 单片机的开发烧写环境(makefile版)

    一、SDCC(Small Device C Compiler)编译环境搭建 1.1、下载 1.2、编译 1.3、测试 二、Hex2Bin+命令行烧写工具配置使用 2.1、下载工具安…

    Linux 2023年6月8日
    0131
  • [Linux]LVS(Linux Virtual Server)

    LVS(Linux Virtual Server) LVS(Linux Virtual Server) 什么是LVS? 为什么要用LVS? LVS的组成及作用 LVS相关术语 LV…

    Linux 2023年6月13日
    093
  • 附031.Kubernetes_v1.20.4高可用部署架构二

    kubeadm介绍 kubeadm概述 参考附003.Kubeadm部署Kubernetes。 kubeadm功能 参考附003.Kubeadm部署Kubernetes。 本方案描…

    Linux 2023年6月13日
    086
  • 【文件格式探究】EP.1 对ePub文件格式的初探

    这是”文件格式探究”专题的第 1 期——初探 “ePub” 文件格式。这个专题将会给各位读者呈现笔者探索各种文件格式的过程,具体则是…

    Linux 2023年6月13日
    0186
  • 防止shell script多次运行

    防止shell script多次运行 一个思路是在script初期检测系统中是否存在同名进程。 if [ ps -ef | grep "test.sh" | g…

    Linux 2023年5月28日
    086
  • centos进入rescue 失败

    环境:centos7 在机械盘 win10在固态盘 场景:centos7 中/etc/grub.d/下的30_os_prober 脚本删掉后导致 grub2 列举不出别的磁盘上系统…

    Linux 2023年6月6日
    0103
  • 大数据集群服务启停脚本/常用端口/时间同步

    1、整体启动/停止HDFS start-dfs.sh/stop-dfs.sh 2、整体启动/停止YARN start-yarn.sh/stop-yarn.sh 1、分别启动/停止H…

    Linux 2023年6月8日
    097
  • AI场景存储优化:云知声超算平台基于 JuiceFS 的存储实践

    云知声是一家专注于语音及语言处理的技术公司。 Atlas 超级计算平台是云知声的计算底层基础架构,为云知声在 AI 各个领域(如语音、自然语言处理、视觉等)的模型迭代提供训练加速等…

    Linux 2023年6月14日
    099
  • Debian 开机自动挂载磁盘

    首先要知道自己的磁盘是什么格式的, 常见的有 ext4 Fat32 ntfs exfat ntfs 和 exfat 磁盘格特殊说明, 因为需要额外支持才能挂载. 查看磁盘和分区的命…

    Linux 2023年6月7日
    0102
  • linux ssh连接自动断开问题

    场景描述:云上的虚拟机使用public ip连接ssh时,一直提示已经连接,但是就会自动关闭 通过正常虚拟机作为跳板,能够连接到目标机子上,检查发现进程正常,但是就一直连接不上 发…

    Linux 2023年6月7日
    090
  • Redisson实现分布式锁源码解读

    文章目录 一、分布式锁的概念 和 使用场景 二、将redis官网对于分布式锁(红锁)的定义和Redisson实现做概括性总结 三、基于Redisson的分布式实现方案 四、加锁过程…

    Linux 2023年5月28日
    089
  • RabbitMQ知识简单理解

    官网链接:http://next.rabbitmq.com/getstarted.html 官网给出了每种工作模式的实例代码,可以参考其中的实现 一、RabbitMQ整体架构图 二…

    Linux 2023年6月14日
    0118
  • ThinkPHP5 远程命令执行漏洞

    一、ThinkPHP介绍 轻量级框架,内部OOP和面向过程代码都存在,是国人自己开发的框架。ThinkPHP是一个快速、兼容而且简单的轻量级国产PHP开发框架,诞生于2006年初,…

    Linux 2023年6月14日
    080
  • Bash shell

    例一: 函数、返回状态值、比较 #!/bin/bash NUM=$(date +%S) echo "当前苹果价格是每斤$NUM元" echo "===…

    Linux 2023年5月28日
    091
  • C盘空间怎么不够了?原来杀毒软件隔离区太大了

    打开小红伞的隔离区,文件全选,删除,居然一下多出20个G. C盘空间怎么不够了?原来杀毒软件隔离区太大了 麻了。打开小红伞的隔离区,文件全选,删除,一下多出20个G. 还有一个比较…

    Linux 2023年6月6日
    0119
  • 分区表、文件系统等计算机基础知识

    开机固件 BIOS UEFI 特别老的BIOS不支持GPT分区 目前已取代BIOS 分区表类型 MBR GPT 1.不支持2TB以上的硬盘2.主分区不能超过4个3.可以通过建立扩展…

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