前言
在互联网发展到一定规模后,直接对数据库的读取已经无法满足互联网的需要,因此出现了高效存储系统,将数据存放在内存当中,这样加快了读取速度。
初始
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 可以为空。
# redis
spring.redis.host=127.0.0.1
spring.redis.port=6379
spring.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
@AutoConfigureMockMvc
class 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 相关信息,相信一定会有新大陆发现的。
好了,感谢您的阅读,希望您喜欢,如对您有帮助,欢迎点赞收藏。如有不足之处,欢迎评论指正。下次见。
评论