SpringBoot+Maven+MyBaitsPlus+MySQL+Redis——配置、开启Redis的基本使用
1、前置知识
(1)MybatisPlus操作数据库与代码生成:有道云笔记
2、安装RDIS监控软件:RedisDesktopManager
3、引入pom.xml引入依赖
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>4.2.2</version>
</dependency>
<dependency><groupId>org.apache.commons</groupId><artifactId>commons-lang3</artifactId>
</dependency>
4、在config文件夹中创建RedisConfig,如下文件:
package MybatisPlusTest.config;import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.PropertyAccessor;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.cache.CacheManager;
import org.springframework.cache.annotation.CachingConfigurerSupport;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.cache.RedisCacheConfiguration;
import org.springframework.data.redis.cache.RedisCacheManager;
import org.springframework.data.redis.cache.RedisCacheWriter;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory;
import org.springframework.data.redis.core.*;
import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;import java.time.Duration;@Configuration
@EnableCaching
public class RedisConfig extends CachingConfigurerSupport {/*** 选择redis作为默认缓存工具* @param redisConnectionFactory* @return*//*@Bean//springboot 1.xxpublic CacheManager cacheManager(RedisTemplate redisTemplate) {RedisCacheManager rcm = new RedisCacheManager(redisTemplate);return rcm;}*/@Bean
// public CacheManager cacheManager(RedisConnectionFactory redisConnectionFactory) {
// RedisCacheConfiguration redisCacheConfiguration = RedisCacheConfiguration.defaultCacheConfig()
// .entryTtl(Duration.ofHours(1)); // 设置缓存有效期一小时
// return RedisCacheManager
// .builder(RedisCacheWriter.nonLockingRedisCacheWriter(redisConnectionFactory))
// .cacheDefaults(redisCacheConfiguration).build();
// }public RedisCacheManager redisCacheManager(LettuceConnectionFactory lettuceConnectionFactory){return RedisCacheManager.builder(lettuceConnectionFactory).cacheDefaults(RedisCacheConfiguration.defaultCacheConfig(Thread.currentThread().getContextClassLoader())).build();}/*** retemplate相关配置* @param factory* @return*/@Beanpublic RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {RedisTemplate<String, Object> template = new RedisTemplate<>();// 配置连接工厂template.setConnectionFactory(factory);//使用Jackson2JsonRedisSerializer来序列化和反序列化redis的value值(默认使用JDK的序列化方式)Jackson2JsonRedisSerializer jacksonSeial = new Jackson2JsonRedisSerializer(Object.class);ObjectMapper om = new ObjectMapper();// 指定要序列化的域,field,get和set,以及修饰符范围,ANY是都有包括private和publicom.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);// 指定序列化输入的类型,类必须是非final修饰的,final修饰的类,比如String,Integer等会跑出异常om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);jacksonSeial.setObjectMapper(om);// 值采用json序列化template.setValueSerializer(jacksonSeial);//使用StringRedisSerializer来序列化和反序列化redis的key值template.setKeySerializer(new StringRedisSerializer());// 设置hash key 和value序列化模式template.setHashKeySerializer(new StringRedisSerializer());template.setHashValueSerializer(jacksonSeial);template.afterPropertiesSet();return template;}/*** 对hash类型的数据操作** @param redisTemplate* @return*/@Beanpublic HashOperations<String, String, Object> hashOperations(RedisTemplate<String, Object> redisTemplate) {return redisTemplate.opsForHash();}/*** 对redis字符串类型数据操作** @param redisTemplate* @return*/@Beanpublic ValueOperations<String, Object> valueOperations(RedisTemplate<String, Object> redisTemplate) {return redisTemplate.opsForValue();}/*** 对链表类型的数据操作** @param redisTemplate* @return*/@Beanpublic ListOperations<String, Object> listOperations(RedisTemplate<String, Object> redisTemplate) {return redisTemplate.opsForList();}/*** 对无序集合类型的数据操作** @param redisTemplate* @return*/@Beanpublic SetOperations<String, Object> setOperations(RedisTemplate<String, Object> redisTemplate) {return redisTemplate.opsForSet();}/*** 对有序集合类型的数据操作** @param redisTemplate* @return*/@Beanpublic ZSetOperations<String, Object> zSetOperations(RedisTemplate<String, Object> redisTemplate) {return redisTemplate.opsForZSet();}
}
注意:
(1)如果爆红,先确定pom.xml引用依赖后,是否reload完成了。
(2)上面config文件的代码,可以暂时不用去了解每一个内容做什么,先配置完成。
5、Redis测试:
(1)在controller做注解,@Cacheable
(2)看是否正确存入到Redis缓存。正确存入Redis结果如下图:
注意:这里本人在使用时碰到了一个类转换的问题。根据下面这个博客内容debug通过:
spring boot 使用redis作为cache 出现:A cannot be cast to A.使用fastJson序列化 - 简书
6、关于注解@Cacheable的详细说明
其中:
(1)value:指明所返回的结果被存储与Redis的什么地方,文中代码对应如下图:
(2)key:这里指定为id,如果id都在redis当中有,则直接从缓存返回值,如果id不存在的话,则执行getuserById方法,从数据库获取。以上图为例:当id=1或2时,直接从缓存返回。其它则第一次从数据库取,其它批次从缓存取。
(3)condition:根据条件,判断结果是否存入缓存。如下图所示:
本文例子是将@Cacheable注解写在controller层,这仅为展示需要,真实项目开发过程中,应该放到service层,避免重复代码。网上有的说放到controller层更加灵活,其实完全没有必要,所有的数据都缓存,冗余一点个人感觉没什么关系。
本文完整代码:
有道云笔记
SpringBoot+Maven+MyBaitsPlus+MySQL+Redis——配置、开启Redis的基本使用相关推荐
- Java项目:角色权限后台脚手架系统(java+Springboot+Maven+myBaits-Plus+Vue+Element-UI+Mysql)
源码获取:博客首页 "资源" 里下载! Springboot框架+myBaits-Plus+MySQL实现的角色权限后台管理脚手架系统实战项目,实现的是所有系统最基础的后台管理功能 ...
- redis配置类+redis工具类
1.RedisConfig.java类 import com.fasterxml.jackson.annotation.JsonAutoDetect; import com.fasterxml.jac ...
- php 使用 redis 配置,php redis扩展装配、配置、使用小结
php redis扩展安装.配置.使用小结 系统是lamp环境(centos6.7+apache2.2+mysql5.7+php5.3),默认 软件下载到/usr/local/src目录下 redis ...
- mac book pro m1 java开发环境,工具汇总,idea,jdk,navicat,java,maven,mysql,rdm,redis下载安装
1月5日更新:用m1开发快两周了,最大的感受就是确实快. 软件适配方面,我之前担心适配问题,现在没有顾虑了,常用的软件都有适配,没有适配的也可以用以前现有的软件,并不是完全不能用. 12-29已经收到 ...
- Java项目:医院预约挂号系统(java+SpringBoot+Maven+Vue+mysql)
源码获取:博客首页 "资源" 里下载! 一.项目运行 环境配置: Jdk1.8 + Tomcat8.5 + Mysql + HBuilderX(Webstorm也行)+ Eclis ...
- Java项目:在线服装销售商城系统(java+SpringBoot+Maven+Vue+mysql)
源码获取:博客首页 "资源" 里下载! 一.项目运行 环境配置: Jdk1.8 + Tomcat8.5 + Mysql + HBuilderX(Webstorm也行)+ Eclis ...
- Springboot+Maven在IDEA中配置好Maven后执行Reimport时提示:com.google.inject.internal.Errors.throwCreationExceptio
场景 在下载安装了并在IDEA中配置Maven之后,在IDEA新建了SpringBoot项目后,进行导入依赖时提示 com.google.inject.CreationException: Unabl ...
- 【Redis】redis 配置 配置文件 redis.conf
1.概述 配置文件整体如下 2.分解 2.1 大小写不敏感 redis 对大小写不明感 # 1k => 1000 bytes # 1kb => 1024 bytes # 1m => ...
- spring data redis 配置
参考:http://www.linuxidc.com/Linux/2015-04/116798.htm 纠结了半天,最终还是放弃使用spring data redis.因为它好像是不支持读写分离的. ...
最新文章
- cpu风扇声音大_笔记本电脑风扇声音大怎么办
- Android 开发者该如何进阶?
- linux终端窗口玩法
- LiveVideoStackCon上海2019音视频技术大会 7折早鸟票最后3天
- ajax滚动条动态加载,下拉滚动条,动态加载ajax加载数据
- 磊哥工作十几年了,竟没有用过do-while!(文末送书)
- cuda笔记-GPU多线程的奇偶排序
- 解决BLOB/TEXT column can‘t have a default value query问题
- 拍照比剪刀手泄露指纹信息;国内绿 iPhone11 抢断货;PostgreSQL 12 Beta 4 发布​ | 极客头条...
- git学习笔记(三)
- windows如何卸载服务
- 30:NET5源码解读
- 计算机组装配置兼容,电脑组装时怎么选择配置主板
- 【按键精灵】N秒内找图函数封装
- 傅里叶级数与变换(二)
- 【ArcGIS微课1000例】0010:ArcGIS影像裁剪(裁剪、掩膜提取)
- 牛客练习赛101 B-荒神在此
- PyPI 官方仓库遭遇挖矿恶意组件投毒
- python短路逻辑特性,使用Python三目计算符的用法及短路逻辑方法介绍
- WCF服务通过TCP实时监控客户端状态,并可以向客户端广播推送消息,实现双向通信
热门文章
- Android省电开发 浅析
- USB转串口芯片CH9101U
- element 控件 tabel中增加el-switch 并绑定点击事件
- MatLab安装ARTE工具箱时不能正常使用load_robot()函数解决方法:
- android模拟滴滴发车,滴滴发车了
- 从0到1搭建webpack2+vue2自定义模板详细教程
- react适配PC端和H5页面
- 聊聊华为的HMS和App Gallery应用商店,以及在海外市场面临的巨大挑战
- WINVER not defined. Defaulting to 0x0600 (Windows Vista)
- (PC+WAP)带手机端pbootcms模板门窗设计类网站