这是我参与8月更文挑战的第14天,活动详情查看:8月更文挑战
收录专栏
前言
在互联网发展到一定规模后,直接对数据库的读取已经无法满足互联网的需要,因此出现了高效存储系统,将数据存放在内存当中,这样加快了读取速度。
初始
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相关信息,相信一定会有新大陆发现的。
作者介绍:【小阿杰】一个爱鼓捣的程序猿,JAVA开发者和爱好者。公众号【Java全栈架构师】维护者,欢迎关注阅读交流。
好了,感谢您的阅读,希望您喜欢,如对您有帮助,欢迎点赞收藏。如有不足之处,欢迎评论指正。下次见。