redis代替mybatis做缓存
将redis作为缓存
- <dependencies>
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-web</artifactId>
- </dependency>
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-test</artifactId>
- <scope>test</scope>
- <exclusions>
- <exclusion>
- <groupId>org.junit.vintage</groupId>
- <artifactId>junit-vintage-engine</artifactId>
- </exclusion>
- </exclusions>
- </dependency>
- <dependency>
- <groupId>org.mybatis.spring.boot</groupId>
- <artifactId>mybatis-spring-boot-starter</artifactId>
- <version>1.3.2</version>
- </dependency>
- <dependency>
- <groupId>mysql</groupId>
- <artifactId>mysql-connector-java</artifactId>
- </dependency>
- <dependency>
- <groupId>log4j</groupId>
- <artifactId>log4j</artifactId>
- <version>1.2.17</version>
- </dependency>
- <dependency>
- <groupId>junit</groupId>
- <artifactId>junit</artifactId>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>com.alibaba</groupId>
- <artifactId>druid</artifactId>
- <version>1.1.10</version>
- </dependency>
- <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-data-redis -->
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-data-redis</artifactId>
- <version>1.5.8.RELEASE</version>
- </dependency>
- </dependencies>
pom
test文件
- package com.lqh.springdataredis;
- import com.lqh.springdataredis.dao.AdminDao;
- import com.lqh.springdataredis.entity.Admin;
- import org.junit.Test;
- import org.junit.runner.RunWith;
- import org.springframework.boot.test.context.SpringBootTest;
- import org.springframework.test.context.junit4.SpringRunner;
- import javax.annotation.Resource;
- import java.util.List;
- @SpringBootTest(classes = SpringdataRedisApplication.class)
- @RunWith(SpringRunner.class)
- public class TestClazz {
- @Resource
- AdminDao adminDao;
- @Test
- public void selectAll(){
- List<Admin> admins = adminDao.queryAll(new Admin());
- for (Admin admin : admins) {
- System.out.println(admin);
- }
- System.out.println("=========================================================");
- List<Admin> admins1 = adminDao.queryAll(new Admin());
- for (Admin admin : admins1) {
- System.out.println(admin);
- }
- }
- }
配置文件
- server.port=8087
- logging.level.root=error
- logging.level.com.lqh.springdataredis.dao=debug
- #spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
- spring.datasource.username=root
- spring.datasource.password=root
- spring.datasource.driver-class-name=com.mysql.jdbc.Driver
- spring.datasource.url=jdbc:mysql://localhost:3306/girls?serverTimezone=GMT%2B8
- mybatis.mapper-locations=classpath:mapper/*.xml
- mybatis.type-aliases-package=com.lqh.springdataredis.entity
- spring.redis.host=192.168.253.11
- spring.redis.port=6379
自定义cache
- package com.lqh.springdataredis.mycache;
- import com.lqh.springdataredis.entity.Admin;
- import org.apache.ibatis.cache.Cache;
- import org.springframework.data.redis.core.RedisTemplate;
- import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
- import org.springframework.data.redis.serializer.StringRedisSerializer;
- import java.util.concurrent.locks.ReadWriteLock;
- public class Mycache implements Cache {
- // 这个id是namespace 这个类是mybatis 调用的所以这个构造方法的参数也是mybatis传递的
- private String id;
- public Mycache(String id) {
- this.id = id;
- }
- @Override
- public String getId() {
- System.out.println("getId: "+id);
- /**
- * id: com.lqh.springdataredis.dao.AdminDao
- */
- return id;
- }
- /**
- * 存储从数据库中查找的数据当请求到达的时候先去缓存中去找数据如果没有数据则去数据库中去找
- * 并且将查询到的数据添加到缓存中
- * 在这个方法中将从数据库中查询到的数据保存到redis中
- * 因为这个类的是由mybatis进行调用的的那么这个类就不能使用注解的方式那么如何在springboot的项目中
- * 普通类如果想要使用spring工厂管理的组件(redisTemplate)需要做一下操作
- * implements ApplicationContextAwear会将工厂作为参数传递给你重写这类里面的所有方法就会将你传入的类交由工厂管理
- * @param o
- * @param o1
- */
- @Override
- public void putObject(Object o, Object o1) {
- System.out.println("putObject : "+o);
- System.out.println("putObject :"+o1);
- /**
- * o的值:
- * putObject : 518470582:509867698:com.lqh.springdataredis.dao.AdminDao.queryAll:0:2147483647:select
- * id, name, birthday, mesage
- * from girls.admin:SqlSessionFactoryBean
- * o1的值:
- * putObject :[Admin{id=1, name='朱李飞', birthday=Wed Oct 16 00:00:00 CST 2019, mesage='8888'},
- * Admin{id=8, name='33', birthday=Fri Nov 15 00:00:00 CST 2019,
- */
- // 从容器中获取redisTemplate
- RedisTemplate redisTemplate = (RedisTemplate) MyApplicationContexAware.getBeanByName("redisTemplate");
- // 以json作为序列化方式
- Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Admin.class);
- redisTemplate.setKeySerializer(jackson2JsonRedisSerializer);
- // redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);
- // redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer);
- redisTemplate.setDefaultSerializer(jackson2JsonRedisSerializer);
- // 将数据添加到redis中 key o | value o1
- redisTemplate.opsForHash().put(id,o,o1);
- }
- /**
- * 从缓存中获取数据
- * @param o
- * @return
- */
- @Override
- public Object getObject(Object o) {
- System.out.println("getObject: "+o);
- /**
- * getObject: 518470582:509867698:com.lqh.springdataredis.dao.AdminDao.queryAll:0:2147483647:select
- * id, name, birthday, mesage
- * from girls.admin:SqlSessionFactoryBean
- */
- RedisTemplate redisTemplate = (RedisTemplate) MyApplicationContexAware.getBeanByName("redisTemplate");
- // id 是 key o value o
- Object o1 = redisTemplate.opsForHash().get(id, o);
- return o1;
- }
- @Override
- public Object removeObject(Object o) {
- return null;
- }
- //当进行修改操作时会清空缓存
- @Override
- public void clear() {
- RedisTemplate redisTemplate = (RedisTemplate) MyApplicationContexAware.getBeanByName("redisTemplate");
- redisTemplate.delete(id);
- }
- @Override
- public int getSize() {
- return 0;
- }
- @Override
- public ReadWriteLock getReadWriteLock() {
- return null;
- }
- }
ApplicationContextAwear
- package com.lqh.springdataredis.mycache;
- import org.springframework.beans.BeansException;
- import org.springframework.context.ApplicationContext;
- import org.springframework.context.ApplicationContextAware;
- import org.springframework.stereotype.Component;
- @Component
- public class MyApplicationContexAware implements ApplicationContextAware {
- /**
- * 这个类主要是获取工厂对象用于管理
- * @param applicationContext
- * @throws BeansException
- */
- private static ApplicationContext applicationContext;
- @Override
- public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
- this.applicationContext = applicationContext;
- }
- public static Object getBeanByClazz(Class clazz){
- Object bean = applicationContext.getBean(clazz);
- return bean;
- }
- public static Object getBeanByName(String name){
- Object bean = applicationContext.getBean(name);
- return bean;
- }
- }
redis代替mybatis做缓存的更多相关文章
- redis与ssm整合(用 redis 替代mybatis二级缓存)
SSM+redis整合 这里主要是利用redis去做mybatis的二级缓存,mybaits映射文件中所有的select都会刷新已有缓存,如果不存在就会新建缓存,所有的insert,update操作都 ...
- redis代替kafka做缓存队列
前言:刚上线elk一个月左右,使用的kafka作为缓存队列,但是不知道为何,中间发生过好几次,elk突然没数据了,长达好几天都没有, 折腾了好久,好了,过几天又发生同样的状况.经查找,数据是 ...
- Nosql 之 Redis(可做缓存 )
下载 可以下载解压安装的 地址:https://github.com/dmajkic/redis/downloads 修改 redis.conf 取消注释 requirepass foobared运行 ...
- mybatis本地缓存&分布式缓存干货分享
前言:干货记录学习mybatis实际开发中缓存的使用. 环境: springboot2.X + mybatis3.x Mybatis是一款持久层框架,它提供了一级缓存和二级缓存. 名词解释 一级缓存( ...
- Mybatis一级缓存、二级缓存详讲
Mybatis 一级缓存.二级缓存 作者 : Stanley 罗昊 [转载请注明出处和署名,谢谢!] 查询缓存 首先,我们先看一下这个标题“查询缓存”,那就说明跟增.删.改是没有任何关联的,只有在查询 ...
- mybatis一级缓存和二级缓存(一)
一级缓存: 就是Session级别的缓存.一个Session做了一个查询操作,它会把这个操作的结果放在一级缓存中. 如果短时间内这个session(一定要同一个session)又做了同一个操作,那么h ...
- SpringBoot之Mybatis操作中使用Redis做缓存
上一博客学习了SpringBoot集成Redis,今天这篇博客学习下Mybatis操作中使用Redis做缓存.这里其实主要学习几个注解:@CachePut.@Cacheable.@CacheEvict ...
- spring-boot集成mybatis,用redis做缓存
网上有很多例子了,执行源码起码有3个,都是各种各样的小问题. 现在做了个小demo,实现spring-boot 用redis做缓存的实例,简单记录下思路,分享下源码. 缓存的实现,分担了数据库的压力, ...
- sping整合redis,以及做mybatis的第三方缓存
一.spring整合redis Redis作为一个时下非常流行的NOSQL语言,不学一下有点过意不去. 背景:学习Redis用到的框架是maven+spring+mybatis(框架如何搭建这边就不叙 ...
随机推荐
- 【网络编程】TCPIP-5-UDP
目录 前言 5. UDP 网络编程 5.1 UDP 的工作原理 5.2 UDP 的高效性 5.3 实现 UDP 服务端/客户端 5.3.1 概念 5.3.2 UDP 的数据 I/O 函数 5.3.3 ...
- C51—模拟IIC总线实现EEPROM存取数据
a - 什么是IIC总线 -什么是EEPROM -IIC总线的通信格式 模块化设计注解 整体代码 - 什么是IIC总线 IIC总线是同步通信的一种特殊形式,具有接线口少.控制简单.器件封装形式小.通信 ...
- flutter获取状态栏高度及安全区域
获取状态栏高度: final double statusBarHeight = MediaQuery.of(context).padding.top; 所谓安全区域,就是适配现在一些刘海屏之类的非常规 ...
- .Net Core NPOI读取Excel 并转为数据实体类
创建应用程序 这里直接创建Console程序 引用NPOI的NuGet包 PM> Install-Package NPOI -Version 2.5.1 直接Nuget包管理器添加 导入Exce ...
- MySQL时间戳、字符串、日期
1.时间转字符串:date_format(date, format) SELECT date_format(now(), '%Y-%m-%d') 2.时间转时间戳:unix_timestamp() S ...
- hdfs数据迁移
有时候可能会进行hadoop集群数据拷贝的情况,可用以下命令进行拷贝 需要在目标集群上来进行操作 hadoop distcp hdfs://192.168.1.233:8020/user/hive/w ...
- Flink API
一.Flink API 1.DataSet:对静态数据进行批处理操作.将静态数据抽象成分布式数据集,使用Flink各种操作符处理数据,支持 Java .Scala.Python 2.DataStrea ...
- 如何攻击Java Web应用
越来越多的企业采用Java语言构建企业Web应用程序,基于Java主流的框架和技术及可能存在的风险,成为被关注的重点. 本文从黑盒渗透的角度,总结下Java Web应用所知道的一些可能被利用的入侵点. ...
- 【Spring 持久层】Spring 与 Mybatis 整合
持久层整合总述 1.Spring 框架为什么要与持久层技术进行整合? JavaEE开发需要持久层进行数据库的访问操作 JDBC.Hibernate.MyBatis 进行持久开发过程存在大量的代码冗余 ...
- 关于IDEA无法加载main方法的bug
问题现象 main方法没有run按钮 问题解决 发现args显示灰色未调用,原来是之前莫名其妙调用了sun包下的String 删除调用问题解决!