写点什么

【Spring Boot 快速入门】六、Spring Boot 集成 Redis

作者:小阿杰
  • 2021 年 12 月 15 日
  • 本文字数:3284 字

    阅读完需:约 11 分钟

【Spring Boot 快速入门】六、Spring Boot集成Redis

前言

  在互联网发展到一定规模后,直接对数据库的读取已经无法满足互联网的需要,因此出现了高效存储系统,将数据存放在内存当中,这样加快了读取速度。

初始

  Redis(Remote Dictionary Server ),即远程字典服务,是一个开源的使用 ANSI C 语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value 数据库,并提供多种语言的 API。  Redis 与其他 key - value 缓存产品有以下三个特点:


  • Redis 支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。

  • Redis 不仅仅支持简单的 key-value 类型的数据,同时还提供 list,set,zset,hash 等数据结构的存储。

  • Redis 支持数据的备份,即 master-slave 模式的数据备份。

数据类型

  Redis 有五种基础数据类型:字符串(string)、散列(hash)、列表(list)、集合(set)、有序集合(zset).


  • 字符串(string):string 是 redis 最基本的类型,是二进制安全的,string 类型的值最大能存储 512MB。

  • 散列(hash):一个 string 类型的 field 和 value 的映射表,hash 特别适合用于存储对象。

  • 列表(list):list 列表是简单的字符串列表,按照插入顺序排序。

  • 集合(set):Set 是 string 类型的无序集合。集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。

  • 有序集合(zset):zset 和 set 一样也是 string 类型元素的集合,且不允许重复的成员,zset 集合中的成员都是有序的成员。

Redis 特点

  Redis 特点


  • 性能极高

  • 丰富的数据类型

  • 速度快

  • 基于键值对的数据结构服务器

  • 丰富的功能(如对列、订阅、流水线、事物等)

  • 简单稳定

  • 支持多种变成语言

  • 持久化

  • 主从复制

  • 高可用、分布式、高并发

快速开始

  本文将基于 Spring Boot 集成 Redis,进行相关的开发和测试,其中有 Redis 配置项、引入的依赖等相关配置是初次引入,因此需要配置。

引入依赖

  本文是基于 Maven 进行项目构建的,因此需要引入相关 POM 依赖。相关依赖如下:


        <!-- redis start-->        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-data-redis</artifactId>        </dependency>        <dependency>            <groupId>org.apache.commons</groupId>            <artifactId>commons-pool2</artifactId>        </dependency>        <!-- redis end-->
<!-- fastjson --> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.70</version> </dependency> <!-- fastjson -->
复制代码

服务配置

  本次采用最简单的 redis 配置文件,主要包含:host 服务器地址信息、port 服务器端口信息和 password 服务器的验证信息,其中 password 可以为空。


# redisspring.redis.host=127.0.0.1spring.redis.port=6379spring.redis.password=
复制代码

RedisConfig

  • @Configuration 用于定义配置类,通过调用同一类中的其他 @Bean 方法来定义 bean 之间的依赖关系。

  • @ConditionalOnClass:某个 class 位于类路径上,才会实例化一个 Bean。

  • @EnableConfigurationProperties 注解的作用是:使使用 @ConfigurationProperties 注解的类生效。

  • @ConditionalOnMissingBean,它是修饰 bean 的一个注解会保证你的 bean 只有一个。


package com.example.demo.config;
import com.alibaba.fastjson.support.spring.FastJsonRedisSerializer;import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;import org.springframework.boot.autoconfigure.data.redis.RedisProperties;import org.springframework.boot.context.properties.EnableConfigurationProperties;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.data.redis.connection.RedisConnectionFactory;import org.springframework.data.redis.core.RedisOperations;import org.springframework.data.redis.core.RedisTemplate;import org.springframework.data.redis.core.StringRedisTemplate;import org.springframework.data.redis.serializer.StringRedisSerializer;
/** * @ClassName RedisConfig * @Description: RedisConfig配置 * @Author JavaZhan @公众号:Java全栈架构师 * @Date 2020/6/13 * @Version V1.0 **/@Configuration@ConditionalOnClass(RedisOperations.class)@EnableConfigurationProperties(RedisProperties.class)public class RedisConfig {
@Bean @ConditionalOnMissingBean(name = "redisTemplate") public RedisTemplate<Object, Object> redisTemplate( RedisConnectionFactory redisConnectionFactory) { RedisTemplate<Object, Object> template = new RedisTemplate<>(); FastJsonRedisSerializer fastJsonRedisSerializer = new FastJsonRedisSerializer(Object.class); template.setValueSerializer(fastJsonRedisSerializer); template.setHashValueSerializer(fastJsonRedisSerializer); template.setKeySerializer(new StringRedisSerializer()); template.setHashKeySerializer(new StringRedisSerializer()); template.setConnectionFactory(redisConnectionFactory); return template; }

@Bean @ConditionalOnMissingBean(StringRedisTemplate.class) public StringRedisTemplate stringRedisTemplate( RedisConnectionFactory redisConnectionFactory) { StringRedisTemplate template = new StringRedisTemplate(); template.setConnectionFactory(redisConnectionFactory); return template; }
}
复制代码

RedisUtils

  当然集成 Redis 之后,在使用 Redis 的时候避免不了使用 RedisUtils 工具类。网上相关封装的 RedisUtils 已经很多了,大家可以根据需要,自己在网上找一下通用的 RedisUtils 工具类即可,本文就不贴代码了,都是通用的代码。

启动 Redis

  启动本地 Redis 。


DemoApplicationTests

package com.example.demo;
import com.example.demo.controller.TestController;import com.example.demo.service.UserService;import com.example.demo.utils.RedisUtils;import org.junit.jupiter.api.Test;import org.junit.runner.RunWith;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;import org.springframework.boot.test.context.SpringBootTest;import org.springframework.test.annotation.Rollback;import org.springframework.test.context.junit4.SpringRunner;
import javax.annotation.Resource;
@SpringBootTest(classes = DemoRedisApplication.class)@RunWith(SpringRunner.class)@Rollback@AutoConfigureMockMvcclass DemoApplicationTests {


@Resource private RedisUtils redisUtils; /** * @ClassName testRedis * @Description: testRedis * @Author JavaZhan @公众号:Java全栈架构师 * @Date 2020/6/13 * @Version V1.0 **/ @Test void testRedis(){ System.out.println("开始"); redisUtils.set("test","this is test redis"); System.out.println("获取结果"+ redisUtils.get("test")); System.out.println("结束"); }
}
复制代码

执行结果如下

结语

  这样 Redis 与 Spring Boot 集成成功啦。更多的测试大家可以深入研究一下 Redis 相关信息,相信一定会有新大陆发现的。


  好了,感谢您的阅读,希望您喜欢,如对您有帮助,欢迎点赞收藏。如有不足之处,欢迎评论指正。下次见。

发布于: 3 小时前阅读数: 9
用户头像

小阿杰

关注

一个爱鼓捣的程序猿,JAVA开发者和爱好者。 2020.10.24 加入

一个爱鼓捣的程序猿,JAVA开发者和爱好者。 分享生活工作中所见、所闻、所学、所用,愿不断成长。公众号【Java全栈架构师】维护者。 自建微信小程序【软考真题解析】【实用在线工具箱】,欢迎阅读交流。

评论

发布
暂无评论
【Spring Boot 快速入门】六、Spring Boot集成Redis