Spring Boot 缓存,默认使用的是 ConcurrentMap 的方式来实现的,但是开发经常会引入第三方缓存框架,来完成对数据的缓存操作。比如说:Redis
maven依赖

<!--引入 redis starter 的maven依赖-->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

yml配置

spring:datasource:name: testurl: jdbc:mysql://localhost:3306/test?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC #urlusername: rootpassword: rootdriver-class-name: com.mysql.cj.jdbc.Driverredis:database: 1host: localhostport: 6379timeout: 100
  • 配置好 redis 相关属性之后,Spring Boot 在项目启动时,便会自动为我们注入 redisTemplate、stringRedisTemplate 组件。因为我们操作缓存大多数都是对字符串进行操作。所以为我们专门抽取出来的stringRedisTemplate
    组件,方便我们的使用。
  • 新建一个配置类 MyRedisConfig.java,使用@Configuration 注解来标注该类是一个配置类。然后使用 @Bean 注解为 IOC 容器注册我们自定义的 redisCacheManager,复制可用
package com.example.test.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.core.*;
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;import java.time.Duration;/*** @author lzh* create 2019-09-24-15:07*/
@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;}*/@Beanpublic CacheManager cacheManager(RedisConnectionFactory redisConnectionFactory) {RedisCacheConfiguration redisCacheConfiguration = RedisCacheConfiguration.defaultCacheConfig().entryTtl(Duration.ofHours(1)); // 设置缓存有效期一小时return RedisCacheManager.builder(RedisCacheWriter.nonLockingRedisCacheWriter(redisConnectionFactory)).cacheDefaults(redisCacheConfiguration).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();}
}

详情参见

Spring 缓存的详解相关推荐

  1. spring2.0和spring2.5及以上版本的jar包区别 spring jar 包详解

    spring jar 包详解 spring.jar是包含有完整发布的单个jar包,spring.jar中包含除了 spring-mock.jar里所包含的内容外其它所有jar包的内容,因为只有在开发环 ...

  2. Spring启动过程详解

    Spring启动过程详解 前言 spring容器启动过程 AnnotationConfigApplicationContext 有参数构造方法 无参数构造 AnnotatedBeanDefinitio ...

  3. Spring循环依赖详解

    Spring循环依赖详解 什么是循环依赖 spring是如何解决循环依赖 循环源码分析 getSingletion方法 getSingleton spring开启代理对象的地方 循环依赖的限制条件 什 ...

  4. Spring Web MVC详解

    Spring Web MVC详解 原创 2016年03月23日 10:55:57 标签: 421 编辑 删除 2.1.Spring Web MVC是什么 Spring Web MVC是一种基于Java ...

  5. Spring JdbcTemplate方法详解

    2019独角兽企业重金招聘Python工程师标准>>> Spring JdbcTemplate方法详解 标签: springhsqldbjava存储数据库相关sql 2012-07- ...

  6. Spring Boot 配置文件详解

    2019独角兽企业重金招聘Python工程师标准>>> 第二篇 : Spring Boot配置文件详解 文章首发于微信公众号<程序员果果> 地址:https://mp.w ...

  7. Spring的lazy-init详解

    Spring中lazy-init详解 ApplicationContext实现的默认行为就是在启动服务器时将所有singleton bean提前进行实例化 (也就是依赖注入).提前实例化意味着作为初始 ...

  8. 操作系统:基于页面置换算法的缓存原理详解(下)

    概述: 在上一篇<操作系统:基于页面置换算法的缓存原理详解(上)>中,我们主要阐述了FIFO.LRU和Clock页面置换算法.接着上一篇说到的,本文也有三个核心算法要讲解.分别是LFU(L ...

  9. spring boot配置文件详解

    spring boot配置文件详解 application.properties是spring-boot的核心配置文件,这个配置文件基本可以取代我们ssm或者ssh里面的所有的xml配置文件. 当我们 ...

最新文章

  1. 物联网时代更要注意信息安全
  2. SpeedNet: Learning the Speediness in Videos
  3. 7、Reverse Integer(python)
  4. CPU 到底是怎么认识代码的?涨姿势了!
  5. 30 个提高Web 程序执行效率的好经验[转]
  6. Dynamic_Performance_Tables_not_accessible_问题_解决不能动态统计
  7. JS 学习笔记--8---Function类型
  8. 根据服务端生成的WSDL文件创建客户端支持代码的三种方式
  9. wifi 小米pro 驱动 黑苹果_小米笔记本 pro 安装黑苹果
  10. UML用例图的画法详细介绍【软件工程】
  11. tensorflow.js基本使用 图标识别(八)
  12. Unity3D Terrain 变成粉色(紫色/洋红色)解决方案!
  13. android手机安装win10,安卓手机成功安装运行桌面版win10系统
  14. mysql查询周数_MySQL根据年份的周数获取该周起始时间
  15. 触发器:建立时间和保持时间
  16. 大数据分析数据挖掘工具有哪些
  17. 计算机d级是什么等级,四级口语考试D等级的评分标准是什么
  18. 【秋招内推】近期互联网公司秋招内推合集
  19. MCE | 靶向 cGAS-STING 通路或可治疗渐冻症
  20. 在火狐浏览器上安装Tampermonkey和Greasy Fork和使用iciba划词翻译

热门文章

  1. Qt 仿QQ图片浏览器
  2. wma转mp3怎么弄_如何使用在线转换器将MP3格式转换为wma格式
  3. 小学生算术测试c语言报告,C语言课程设计报告-小学算术运算测试.doc
  4. cl.zk0.info/index.php,兄弟连区块链入门到精通教程btcpool矿池源码分析环境搭建
  5. DFIG双馈异步式风力发电系统的低电压穿越(LVRT)控制算法的仿真模型,基于Crowbar电路(转子串电阻)和Chopper电路
  6. 2019 第一季度总结
  7. nest.js实战之Filter异常处理
  8. linux下使用tar命令解压.tar.gz文件是参数的说明
  9. 施耐德电气ComPacT NSX塑壳断路器收获肯定彰显实力
  10. Soc-e在FPGA上为任务关键型应用量身定制的IEEE 1588感知以太网交换机