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的基本使用相关推荐

  1. Java项目:角色权限后台脚手架系统(java+Springboot+Maven+myBaits-Plus+Vue+Element-UI+Mysql)

    源码获取:博客首页 "资源" 里下载! Springboot框架+myBaits-Plus+MySQL实现的角色权限后台管理脚手架系统实战项目,实现的是所有系统最基础的后台管理功能 ...

  2. redis配置类+redis工具类

    1.RedisConfig.java类 import com.fasterxml.jackson.annotation.JsonAutoDetect; import com.fasterxml.jac ...

  3. php 使用 redis 配置,php redis扩展装配、配置、使用小结

    php redis扩展安装.配置.使用小结 系统是lamp环境(centos6.7+apache2.2+mysql5.7+php5.3),默认 软件下载到/usr/local/src目录下 redis ...

  4. mac book pro m1 java开发环境,工具汇总,idea,jdk,navicat,java,maven,mysql,rdm,redis下载安装

    1月5日更新:用m1开发快两周了,最大的感受就是确实快. 软件适配方面,我之前担心适配问题,现在没有顾虑了,常用的软件都有适配,没有适配的也可以用以前现有的软件,并不是完全不能用. 12-29已经收到 ...

  5. Java项目:医院预约挂号系统(java+SpringBoot+Maven+Vue+mysql)

    源码获取:博客首页 "资源" 里下载! 一.项目运行 环境配置: Jdk1.8 + Tomcat8.5 + Mysql + HBuilderX(Webstorm也行)+ Eclis ...

  6. Java项目:在线服装销售商城系统(java+SpringBoot+Maven+Vue+mysql)

    源码获取:博客首页 "资源" 里下载! 一.项目运行 环境配置: Jdk1.8 + Tomcat8.5 + Mysql + HBuilderX(Webstorm也行)+ Eclis ...

  7. Springboot+Maven在IDEA中配置好Maven后执行Reimport时提示:com.google.inject.internal.Errors.throwCreationExceptio

    场景 在下载安装了并在IDEA中配置Maven之后,在IDEA新建了SpringBoot项目后,进行导入依赖时提示 com.google.inject.CreationException: Unabl ...

  8. 【Redis】redis 配置 配置文件 redis.conf

    1.概述 配置文件整体如下 2.分解 2.1 大小写不敏感 redis 对大小写不明感 # 1k => 1000 bytes # 1kb => 1024 bytes # 1m => ...

  9. spring data redis 配置

    参考:http://www.linuxidc.com/Linux/2015-04/116798.htm 纠结了半天,最终还是放弃使用spring  data redis.因为它好像是不支持读写分离的. ...

最新文章

  1. cpu风扇声音大_笔记本电脑风扇声音大怎么办
  2. Android 开发者该如何进阶?
  3. linux终端窗口玩法
  4. LiveVideoStackCon上海2019音视频技术大会 7折早鸟票最后3天
  5. ajax滚动条动态加载,下拉滚动条,动态加载ajax加载数据
  6. 磊哥工作十几年了,竟没有用过do-while!(文末送书)
  7. cuda笔记-GPU多线程的奇偶排序
  8. 解决BLOB/TEXT column can‘t have a default value query问题
  9. 拍照比剪刀手泄露指纹信息;国内绿 iPhone11 抢断货;PostgreSQL 12 Beta 4 发布​ | 极客头条...
  10. git学习笔记(三)
  11. windows如何卸载服务
  12. 30:NET5源码解读
  13. 计算机组装配置兼容,电脑组装时怎么选择配置主板
  14. 【按键精灵】N秒内找图函数封装
  15. 傅里叶级数与变换(二)
  16. 【ArcGIS微课1000例】0010:ArcGIS影像裁剪(裁剪、掩膜提取)
  17. 牛客练习赛101 B-荒神在此
  18. PyPI 官方仓库遭遇挖矿恶意组件投毒
  19. python短路逻辑特性,使用Python三目计算符的用法及短路逻辑方法介绍
  20. WCF服务通过TCP实时监控客户端状态,并可以向客户端广播推送消息,实现双向通信

热门文章

  1. Android省电开发 浅析
  2. USB转串口芯片CH9101U
  3. element 控件 tabel中增加el-switch 并绑定点击事件
  4. MatLab安装ARTE工具箱时不能正常使用load_robot()函数解决方法:
  5. android模拟滴滴发车,滴滴发车了
  6. 从0到1搭建webpack2+vue2自定义模板详细教程
  7. react适配PC端和H5页面
  8. 聊聊华为的HMS和App Gallery应用商店,以及在海外市场面临的巨大挑战
  9. WINVER not defined. Defaulting to 0x0600 (Windows Vista)
  10. (PC+WAP)带手机端pbootcms模板门窗设计类网站