大家好,我是IT修真院深圳分院第十三期学员,一枚正直纯洁善良的JAVA程序员。
今天给大家分享一下,修真院官网JAVA任务四里面的一个扩展:springboot和redis整合。
1 背景介绍
1.1 redis是什么?
REmote DIctionary Server(Redis) 是一个由Salvatore Sanfilippo写的key-value存储系统。
Redis是一个开源的使用ANSI C语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。
1.2 为什么使用redis?
当访问量大的时候,使用redis作为缓存系统,可以将已经查询到的数据缓存到redis之中,从而下次访问直接访问缓存层,避免对底层数据库的过多查询造成太大压力,除此之外,由于redis是一个nosql的内存数据库,其访问速度会比直接访问oracle和mysql的数据库快很多。
2 知识剖析
2.1 redis的特点
1、redis支持字符串(String), 哈希(Map), 列表(list), 集合(sets) 和 有序集合(sorted sets)等类型。
2、速度快,因为数据存在内存中,类似于HashMap,HashMap的优势就是查找和操作的时间复杂度都是O(1)
3、支持事务,操作都是原子性,所谓的原子性就是对数据的更改要么全部执行,要么全部不执行
4、丰富的特性:可用于缓存,消息,按key设置过期时间,过期后将会自动删除
2.2 redis相对于memcache的优势
1、memcache只支持简单的key/value,redis支持更多的数据类型
2、Redis支持数据的备份,即master-slave模式的数据备份。
3、Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用
3.常见问题
springboot和redis整合时出现版本不一致
4 解决方案
Spring Boot 1.4 以上 2.0 以下使用 maven spring-boot-starter-redis 依赖需要手动定义依赖版本
Spring Boot 2.0 的 spring-boot-starter-redis 改名为了 spring-boot-starter-data-redis, 所以引入的依赖不同。
<!-- Spring Boot使用的是1.4(包括1.4版本)之前的版本使用如下配置 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-redis</artifactId>
</dependency>
<!-- 1.5.* 的版本需要指定版本号 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-redis</artifactId>
<version>1.4.6.RELEASE</version>
</dependency>
<!-- 2.* 版本 redis依赖改名了,直接使用下面的依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
5.编码实战
6.扩展思考
7.参考文献
CSDN、百度百科
8 更多讨论
1、springboot使用redis如何更改序列化工具
如果要更改序列化工具,那么需要自定义config类 :
如:
@Bean
public RedisTemplate<String, String> redisTemplate(RedisConnectionFactory factory) {
StringRedisTemplate template = new StringRedisTemplate(factory);
Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
ObjectMapper om = new ObjectMapper();
om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
jackson2JsonRedisSerializer.setObjectMapper(om);
template.setValueSerializer(jackson2JsonRedisSerializer);
template.afterPropertiesSet();
return template;
}
2、如何搭建分布式redis
redis使用的master-slave的集群方式,即主从集群。
3、分布式下如何存储session
分布式session的话,主要有2种方式,一种将所有session存入一个redis里面,或者按ip固定存session。一种是使用redis集群同步。
今天的分享就到这里啦,欢迎大家点赞、转发、留言、拍砖~
技能树.IT修真院
“我们相信人人都可以成为一个工程师,现在开始,找个师兄,带你入门,掌控自己学习的节奏,学习的路上不再迷茫”。
这里是技能树.IT修真院,成千上万的师兄在这里找到了自己的学习路线,学习透明化,成长可见化,师兄1对1免费指导。
快来与我一起学习吧~ http://www.jnshu.com/login/1/45664133