SpringCloud 大型系列课程正在制作中,欢迎我们关注与提意见。
程序员每天的CV 与 板砖,也要知其所以然,本系列课程能够协助初学者学习 SpringBooot 项目开发 与 SpringCloud 微服务系列项目开发
1 项目准备
- 创立SpringBoot根底项目
- SpringBoot项目集成mybatis
- SpringBoot 集成 Druid 数据源【SpringBoot系列3】
- SpringBoot MyBatis 完结分页查询数据【SpringBoot系列4】
- SpringBoot MyBatis-Plus 集成 【SpringBoot系列5】
- SpringBoot mybatis-plus-generator 代码生成器 【SpringBoot系列6】
- # SpringBoot MyBatis-Plus 分页查询 【SpringBoot系列7】
运用 Redis ,首先要装置,能够参考这儿www.runoob.com/redis/redis…
我这儿是经过docker-compose来装置的,目录结构如下,你能够在一个目录下定义 data 、logs 目录。
然后创立 redis.conf 文件
#敞开远程可衔接
#bind 127.0.0.1
#自定义暗码
requirepass 12345678
#指定 Redis 监听端口(默许:6379)
port 6379
#客户端搁置指定时长后封闭衔接(单位:秒。0:封闭该功能)
timeout 0
# 900s内假如至少一次写操作则履行bgsave进行RDB耐久化操作
save 900 1
# 在300s内,假如至少有10个key进行了修正,则进行耐久化操作
save 300 10
#在60s内,假如至少有10000个key进行了修正,则进行耐久化操作
save 60 10000
#是否紧缩数据存储(默许:yes。Redis选用LZ 紧缩,假如为了节省 CPU 时刻,能够封闭该选项,但会导致数据库文件变的巨大)
rdbcompression yes
#指定本地数据文件名(默许:dump.rdb)
dbfilename dump.rdb
#指定本地数据文件寄存目录
dir /data
#指定日志文件位置(假如是相对路径,redis会将日志寄存到指定的dir目录下)
logfile "redis.log"
然后编写 docker-compose.yml
version: "3.2"
services:
redis:
image: redis:6.2.6
container_name: redis-6379
restart: always
volumes:
- ./redis.conf:/etc/redis/redis.conf:ro
- ./data:/data
- ./logs:/logs
command: redis-server /etc/redis/redis.conf
ports:
- "6378:6379"
然后在当时目录下翻开终端,履行命令
docker-compose up -d
其他命令
docker stats redis-6379
然后检查是否履行成功,检查docker 容器
docker ps
检查redis 的内存与CPU
docker stats redis-6379
封闭 redis
docker stop redis-6379
2 SpringBoot 中集成 Redis
pom.xml 中增加依赖
<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-data-redis -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
<version>2.7.9</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.commons/commons-pool2 -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
<version>2.11.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.commons/commons-lang3 -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.11</version>
</dependency>
Spring Boot结构中现已集成了redis,在1.x.x的版别中默许运用jedis客户端,而在2.x.x版别中默许运用的lettuce客户端。 本项目运用的 SpringBoot 2.7.9 版别 ,所以选用lettuce来进行装备。
在 application.yml 中增加Redis装备信息:
spring:
redis:
database: 0 # Redis数据库索引(默许为0)
host: localhost # Redis服务器地址
port: 6379 # Redis服务器衔接端口
password: # Redis服务器衔接暗码(默许为空)
lettuce:
pool:
max-active: 8 # 衔接池最大衔接数(运用负值表明没有限制) 默许 8
max-wait: -1 # 衔接池最大阻塞等待时刻(运用负值表明没有限制) 默许 -1
max-idle: 8 # 衔接池中的最大空闲衔接 默许 8
min-idle: 0 # 衔接池中的最小空闲衔接 默许 0
增加一个Redis装备类,运用@EnableCaching注解来敞开缓存
import java.lang.reflect.Method;
import org.springframework.cache.annotation.CachingConfigurerSupport;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.cache.interceptor.KeyGenerator;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
@EnableCaching
public class RedisConfig extends CachingConfigurerSupport{
@Bean
public KeyGenerator keyGenerator() {
return new KeyGenerator() {
@Override
public Object generate(Object target, Method method, Object... params) {
StringBuilder sb = new StringBuilder();
sb.append(target.getClass().getName());
sb.append(method.getName());
for (Object obj : params) {
sb.append(obj.toString());
}
return sb.toString();
}
};
}
}
然后创立一个 RedisController 来测验
import io.swagger.annotations.Api;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@Api(tags="Redis 测验运用")
@RestController()
@RequestMapping("/redis")
@Slf4j
public class RedisController {
@Autowired
private StringRedisTemplate stringRedisTemplate;
@Autowired
private RedisTemplate redisTemplate;
@GetMapping("/testString")
public String testString() {
log.info("redis 开端保存值 ");
stringRedisTemplate.opsForValue().set("name", "早上的年轻人");
log.info("redis 保存完结 ");
String name = stringRedisTemplate.opsForValue().get("name");
return "redis 中取出的值是 " + name ;
}
}
保存用户目标信息
@Api(tags="Redis 测验运用")
@RestController()
@RequestMapping("/redis")
@Slf4j
public class RedisController {
@Autowired
private RedisTemplate redisTemplate;
@GetMapping("/getUser")
public String testGetUser() {
ValueOperations<String, UserInfo> operations = redisTemplate.opsForValue();
UserInfo userInfo = operations.get("sys.user");
if(userInfo==null){
return "未查询到用户";
}
return userInfo.toString();
}
@GetMapping("/saveUser")
public String testSaveUser() {
UserInfo user = new UserInfo();
user.setUserName("早上的年轻人");
user.setUserAge(30);
ValueOperations<String, UserInfo> operations = redisTemplate.opsForValue();
//保存数据
operations.set("sys.user", user);
// 设置10秒后过期
operations.set("sys.user", user, 10, TimeUnit.SECONDS);
return "保存用户信息成功";
}
}
postman 调用 保存用户的接口 然后运用 RDM 客户端检查 redis 库 然后过 10 秒后刷新一下,用户缓存数据已铲除 @Cacheable注解缓存,先查询缓存,有就直接回来,无就履行方法查询,然后将查询成果回来并保存到缓存中
import org.springframework.cache.annotation.Cacheable;
@Api(tags="Redis 测验运用")
@RestController()
@RequestMapping("/redis")
@Slf4j
public class RedisController {
@GetMapping("/getUser")
@Cacheable(value="user-key")
public UserInfo getUser() {
log.info("履行数据库查询用户");
UserInfo user = new UserInfo();
user.setUserName("早上的年轻人");
user.setUserAge(30);
return user;
}
}
项目源码在这儿 :gitee.com/android.lon… 有爱好能够关注一下公众号:biglead
本文正在参与「金石方案」