目录
0. 安装Redis
1. 导入依赖
2. 配置Redis
3. idea连接Redis
4. 使用Redis简单实现记录访问次数
1. 配置拦截器
2. 定义拦截器
3. 控制器类
0. 安装Redis
我使用的是本地Redis服务器,安装过程。安装完成后启动Redis服务。
1. 导入依赖
<!-- redis依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!-- redis中用于对象进行序列化和反序列化的jackson依赖-->
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-jsr310</artifactId>
</dependency>
2. 配置Redis
application.yml
spring:
data:
redis:
host: localhost
port: 6379
password:
# 使用的Redis数据库索引,这里是0,表示使用默认数据库。
database: 0
lettuce:
pool:
# 连接池中最大活跃连接数
max-active: 10
# 连接池中最大空闲连接数
max-idle: 8
# 连接池中最小空闲连接数
min-idle: 0
# 连接池中连接获取的最大等待时间
max-wait: 5s
application.properties
spring.data.redis.host=localhost
spring.data.redis.port=6379
spring.data.redis.password=
spring.data.redis.database=0
spring.data.redis.lettuce.pool.max-active=10
spring.data.redis.lettuce.pool.max-idle=8
spring.data.redis.lettuce.pool.min-idle=0
spring.data.redis.lettuce.pool.max-wait=5s
3. idea连接Redis
连接步骤如下。
配置连接的参数。
连接成功后可以看到该界面。
4. 使用Redis简单实现记录访问次数
使用springMVC拦截器实现记录访问次数。
1. 配置拦截器
@Configuration
@ComponentScan("com.huan.web")
public class InterceptorConfig implements WebMvcConfigurer {
//这里需要注入拦截器,确保 RedisTemplate 在拦截器之前被正确创建和注入
@Autowired
private MyInterceptor myInterceptor;
@Override
public void addInterceptors(InterceptorRegistry registry) {
//将一个新的 MyInterceptor 实例添加到拦截器注册表中
//拦截/resfood/getById-map/*所有请求
registry.addInterceptor(myInterceptor).addPathPatterns(
"/resfood/getById-map/**");
}
}
注意如果这里没有注入拦截器,可能会因为由于 RedisTemplate
没有正确注入到你的拦截器中导致空指针异常(如下图)。
2. 定义拦截器
在拦截器中使用RedisTemplate记录访问的次数。
@Component
public class MyInterceptor implements HandlerInterceptor {
/*
Spring Data Redis 提供的一个模板类,用于简化与 Redis 数据库的交互
类似于map类型,可以存储和检索各种类型的数据,包括字符串、对象、集合等。
但是,它提供了一些额外的功能,如键的过期时间、哈希表操作、列表操作等。
*/
@Autowired
private RedisTemplate<String,Object> redisTemplate;
/**
* 在请求处理之后,视图渲染之前执行,用于进行资源清理
*/
@Override
public void postHandle(HttpServletRequest request,
HttpServletResponse response,
Object handler,
ModelAndView modelAndView) throws Exception {
System.out.println("postHandle");
//输出接收的请求
System.out.println(request.getRequestURI());
String[] key = request.getRequestURI().split("/");
System.out.println(Arrays.toString(key));
// 操作值 自增1 键名为key[2]+":"+key[3]形成的新字符串
redisTemplate.opsForValue().increment(key[2]+":"+key[3]);
}
}
3. 控制器类
写一个简单的测试的控制器类。
@RestController
@RequestMapping("test")
//swagger注解
@Tag(name = "测试",description = "测试springMVC拦截器实现记录访问次数")
public class TestController {
//rest风格url
@GetMapping("getInfo/{id}")
public String test(@PathVariable Integer id) {
switch (id){
case 1:
return "1";
case 2:
return "2";
default:
return "3";
}
}
}
4. 测试
在测试前在idea中查看redis中的数据,在测试前redis中没有任何数据。
在浏览器地址栏(或其他工具)输入localhost:8080/test/getInfo/1,进行测试。
控制台输出。
再次查看redis中的数据,发现多了键值,也记录了访问数据。
over,收工