当前位置: 首页 > news >正文

【SpringBoot】使用Redis

目录

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: localhostport: 6379password:
#        使用的Redis数据库索引,这里是0,表示使用默认数据库。database: 0lettuce: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 在拦截器之前被正确创建和注入@Autowiredprivate MyInterceptor myInterceptor;@Overridepublic 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类型,可以存储和检索各种类型的数据,包括字符串、对象、集合等。但是,它提供了一些额外的功能,如键的过期时间、哈希表操作、列表操作等。*/@Autowiredprivate RedisTemplate<String,Object> redisTemplate;/*** 在请求处理之后,视图渲染之前执行,用于进行资源清理*/@Overridepublic 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,收工

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 一文搞懂 | Pytorch维度转换操作:view,reshape,permute,flatten函数详解
  • linux中vim常用命令大全
  • 微软RD客户端 手机 平板 远程控制 Windows桌面
  • 【Linux】进程优先级|进程切换
  • 【机器学习-神经网络】循环神经网络
  • GateWay三大案例组件
  • 后端开发刷题 | 最长公共子序列(非连续)
  • 科研绘图系列:R语言PCoA图(PCoA plot)
  • 店匠科技携手Stripe共谋电商支付新篇章
  • 前端知识HTMLCSS
  • 从供货上游到下游消费者平台搭建 多商家供货供应链商城开发关键点
  • RabbitMQ 02 操作,配置信息,用户权限
  • 提升效率!ArcGIS中创建脚本工具
  • Unity(2022.3.41LTS) - UI详细介绍- Panel(面板)和RectTransform组件
  • 立即下载!Windows 10 22H2 64位专业精简版
  • Android单元测试 - 几个重要问题
  • Angular数据绑定机制
  • Django 博客开发教程 16 - 统计文章阅读量
  • Effective Java 笔记(一)
  • Linux gpio口使用方法
  • Spring Boot MyBatis配置多种数据库
  • STAR法则
  • Vue ES6 Jade Scss Webpack Gulp
  • 构建二叉树进行数值数组的去重及优化
  • 函数式编程与面向对象编程[4]:Scala的类型关联Type Alias
  • 经典排序算法及其 Java 实现
  • 用Visual Studio开发以太坊智能合约
  • AI又要和人类“对打”,Deepmind宣布《星战Ⅱ》即将开始 ...
  • Spring第一个helloWorld
  • ​草莓熊python turtle绘图代码(玫瑰花版)附源代码
  • # 透过事物看本质的能力怎么培养?
  • (2)STM32单片机上位机
  • (6)设计一个TimeMap
  • (C++二叉树05) 合并二叉树 二叉搜索树中的搜索 验证二叉搜索树
  • (C语言)球球大作战
  • (MTK)java文件添加简单接口并配置相应的SELinux avc 权限笔记2
  • (PyTorch)TCN和RNN/LSTM/GRU结合实现时间序列预测
  • (rabbitmq的高级特性)消息可靠性
  • (附源码)spring boot儿童教育管理系统 毕业设计 281442
  • (考研湖科大教书匠计算机网络)第一章概述-第五节1:计算机网络体系结构之分层思想和举例
  • (三)Kafka 监控之 Streams 监控(Streams Monitoring)和其他
  • (贪心) LeetCode 45. 跳跃游戏 II
  • (转贴)用VML开发工作流设计器 UCML.NET工作流管理系统
  • .NET CORE 3.1 集成JWT鉴权和授权2
  • .Net Core 微服务之Consul(二)-集群搭建
  • .Net Framework 4.x 程序到底运行在哪个 CLR 版本之上
  • .NET Framework 的 bug?try-catch-when 中如果 when 语句抛出异常,程序将彻底崩溃
  • .Net Winform开发笔记(一)
  • .NET/C#⾯试题汇总系列:集合、异常、泛型、LINQ、委托、EF!(完整版)
  • .netcore 6.0/7.0项目迁移至.netcore 8.0 注意事项
  • .vimrc 配置项
  • //TODO 注释的作用
  • /tmp目录下出现system-private文件夹解决方法
  • @ModelAttribute注解使用
  • @RequestBody与@ModelAttribute