【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: 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,收工

  • 9
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

睆小白

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值