1.概述
随着互联网技术的发展,对技术要求也越来越高,所以在当期情况下项目的开发中对数据访问的效率也有了很高的要求,所以在项目开发中缓存技术使用的也越来越多,因为它可以极大的提高系统的访问速度,关于缓存的框架也种类繁多,比如 Redis、Ehchahe、JBoss Cache、Voldemort、Cacheonix 等等,今天主要介绍的是使用现在非常流行的 NoSQL 数据库(Redis)来实现我们的缓存需求
2.SpringBoot 简介
Spring Boot 是由 Pivotal 团队提供的全新框架,其设计目的是用来简化新Spring 应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。通过这种方式,Spring Boot 致力于在蓬勃发展的快速应用开发领域(rapid application development)成为领导者。
主要特点:
1.创建独立的 Spring 应用程序
2.嵌入的 Tomcat,无需部署 WAR 文件
3.简化 Maven 配置
4.自动配置 Spring
5.提供生产就绪型功能,如指标,健康检查和外部配置
6.绝对没有代码生成和对 XML 没有要求配置
3.Redis 简介
Redis 是一个开源(BSD 许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件,Redis 的优势包括它的速度、支持丰富的数据类型、操作原子性,以及它的通用性。
4.下面就是 SpringBoot 整合 Redis 具体实现步骤
4.1 springBoot整合redis的实现步骤
- 步骤一: 导入相关依赖
在 Maven 的 pom.xml 文件中加入 Redis 包.配置redis依赖
<!—配置 redis 依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
<version>2.1.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
<version>2.6.2</version>
</dependency>
//依赖解释
Spring-data-redis提供了在Spring应用中通过简单的配置访问redis服务,
RedisTemplate对reids底层开发包(Jedis, JRedis, and RJC,lettuce)进行了高度封装,
封装了 RedisTemplate 对象来进行对Redis的各种操作、异常处理及序列化,支持发布订阅,并对Spring 3.1 cache进行了实现,它支持所有的Redis原生的 API。
-
步骤二: 配置全局配置文件.配置连接redis的连接参数
server: port: 80 spring: cache: type: redis redis: # redis数据库索引(默认为0),我们使用索引为3的数据库,避免和其他数据库冲突 #database: 3 # redis服务器地址(默认为loaclhost) host: localhost # redis端口(默认为6379) port: 6379 # redis访问密码(默认为空) #password: pwd123 # redis连接超时时间(单位毫秒) timeout: 3000 # redis连接池配置 pool: # 最大可用连接数(默认为8,负数表示无限) max-active: 8 # 最大空闲连接数(默认为8,负数表示无限) max-idle: 4 # 最小空闲连接数(默认为0,该值只有为正数才有用) min-idle: 0 # 从连接池中获取连接最大等待时间(默认为-1,单位为毫秒,负数表示无限) max-wait: -1
-
步骤三: RedisTemplate模板类对象可以配置,也可以不用配置
-
回顾redis存储的数据类型,五种值的数据类型,最终以字符串类型的数据存到redis里面.
问题: 向redis存储javaBean, 集合数据等等其他数据.
解决方案:
可以将javaBean, 集合数据等等其他数据转成字符串类型的数据,再存储到redis里面.
具体实现:
springBoot整合redis时,默认使用的JDK序列化类,将对象数据转成string类型数据.(可以不用配置RedisTemplate模板类)
当然可以手动配置RedisTemplate模板类,可以指定序列化类,比如:性能好的JacksonJsonRedisSerializer
-
可以不用配置, SpringBoot会扫描到该RedisTemplate会初始化这个bean,存到spring容器中.
-
可以配置RedisTemplate(固定代码)
@Configuration public class RedisConfig { /** * 设置Redis序列化方式,默认使用的JDKSerializer的序列化方式,效率低,这里我们使用 jackson * * @param factory * @return */ @Bean public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) { //创建模板类对象 RedisTemplate<String, Object> template = new RedisTemplate<>(); //创建String序列化类 RedisSerializer<String> redisSerializer = new StringRedisSerializer(); //指定使用jackson工具负责具体的序列化操作 Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class); //创建jackson的核心api的 ObjectMapper ,将bean,list,map,数组等等转成字符串 ObjectMapper om = new ObjectMapper(); //使用objectmapper设置bean的属性,修饰符 om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY); //设置默认类型 om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL); //设置将本地时间转成字符串 om.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS); //将核心api objectmapper设置给jackson jackson2JsonRedisSerializer.setObjectMapper(om); //通过工厂得到连接对象 template.setConnectionFactory(factory); //设置key序列化方式: 转成字符串 template.setKeySerializer(redisSerializer); //设置value序列化: 字符串 template.setValueSerializer(jackson2JsonRedisSerializer); //value hashmap序列化 template.setHashValueSerializer(jackson2JsonRedisSerializer); return template; } //获取缓存管理器对象:管理缓存 @Bean public CacheManager cacheManager(RedisConnectionFactory factory) { RedisSerializer<String> redisSerializer = new StringRedisSerializer(); Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
-