第1关:Springboot 整合 Redis
任务描述
本关任务:实现 Springboot 整合 Redis。
相关知识
为了完成本关任务,你需要掌握:
- 什么是 Redis;
- 为什么用 Redis;
- Springboot 整合 Redis。
什么是 Redis
-
redis 是一个开源的、使用 C 语言编写的、支持网络交互的、可基于内存也可持久化的 Key-Value 数据库。
-
redis 是一个以 key-value 存储的数据库结构型服务器,它支持的数据结构类型包括:字符串(String)、链表(lists)、哈希表(hash)、集合(set)、有序集合(Zset)等。为了保证读取的效率,redis 把数据对象都存储在内存当中,它可以支持周期性的把更新的数据写入磁盘文件中。而且它还提供了交集和并集,以及一些不同方式排序的操作。
为什么用 Redis
原因很简单,快!这个问题在大并发,高负载的网站中必须考虑 redis 数据库中的所有数据都存储在内存中。由于内存的读写速度远快于硬盘,因此 Redis 的的的在性能上对比其他基于硬盘存储的数据库有非常明显的优势。
Springboot 整合 Redis
- 导入依赖:
<!--引入redis-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!--springboot2.x集成redis所需common-pool2-->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
<version>2.7.0</version>
</dependency>
- 配置 redis:
@Bean
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
// 设置value的序列化规则和 key的序列化规则
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer()); //通用
// hash类型
redisTemplate.setHashKeySerializer(new StringRedisSerializer());
redisTemplate.setHashValueSerializer(new GenericJackson2JsonRedisSerializer());
//注入连接工厂
redisTemplate.setConnectionFactory(redisConnectionFactory);
return redisTemplate;
}
- 配置 yaml:
#redis 的 yaml 配置
spring:
redis:
# redis服务器地址(默认为loaclhost)
host: localhost
# redis端口(默认为6379)
port: 6379
# redis连接超时时间(单位毫秒)
timeout: 1000
# redis数据库索引(默认为0)
database: 0
lettuce:
pool:
# 最大可用连接数(默认为8,负数表示无限)
max-active: 15
# 从连接池中获取连接最大等待时间(默认为-1,单位为毫秒,负数表示无限)
max-wait: 5000ms
# 最大空闲连接数(默认为8,负数表示无限)
max-idle: 10
- redis 简单的存取值操作:
//注入 redis
@Autowired
RedisTemplate redisTemplate;
@Override
public String getRedis() {
//redis 中存值
this.redisTemplate.opsForValue().set("frontToken", "测试redis");
//取出存入 redis 中的值
String value = (String) redisTemplate.opsForValue().get("frontToken");
return value;
}
编程要求
- 在 RedisConfig.java 、application-dev.yaml 、UserServiceImpl.java 中 Begin-End 处根据提示补充代码。
- 实现 Springboot 整合 Redis 并进行简单的存取值操作。
测试说明
平台会对你编写的代码进行测试:发送请求测试代码是否运行成功。
预期输出: 测试
开始你的任务吧,祝你成功!
RedisConfig.java
package com;
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.RedisTemplate;
import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;
@Configuration
public class RedisConfig {
/**
* redisTemplate 序列化使用的jdkSerializeable, 存储二进制字节码, 所以自定义序列化类
* @param redisConnectionFactory
* @return
*/
//redis 的config配置
/******************************Begin******************************/
@Bean
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
// 设置value的序列化规则和 key的序列化规则
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer()); //通用
// hash类型
redisTemplate.setHashKeySerializer(new StringRedisSerializer());
redisTemplate.setHashValueSerializer(new GenericJackson2JsonRedisSerializer());
//注入连接工厂
redisTemplate.setConnectionFactory(redisConnectionFactory);
return redisTemplate;
}
/******************************End******************************/
}
application-dev.yaml
#redis 的 yaml 配置
spring:
redis:
# redis服务器地址(默认为loaclhost)
host: localhost
# redis端口(默认为6379)
port: 6379
# redis连接超时时间(单位毫秒)
timeout: 1000
# redis数据库索引(默认为0)
database: 0
lettuce:
pool:
# 最大可用连接数(默认为8,负数表示无限)
max-active: 15
# 从连接池中获取连接最大等待时间(默认为-1,单位为毫秒,负数表示无限)
max-wait: 5000ms
# 最大空闲连接数(默认为8,负数表示无限)
max-idle: 10
UserServiceImpl.java
package com.www.service.impl;
import com.www.entity.User;
import com.www.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
/**
* serviceimpl
*/
@Service("userService")
public class UserServiceImpl implements UserService {
@Autowired
RedisTemplate redisTemplate;
@Override
public String getRedis() {
this.redisTemplate.opsForValue().set("frontToken", "测试");
//取出存入 redis 中的值
/******************************Begin******************************/
String value ;
value = (String) redisTemplate.opsForValue().get("frontToken");
/******************************End******************************/
return value;
}
}
加油,同学们!