SpringBoot项目进行Redis配置

2022-10-29 11:55:26

NoSQL

Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。 它支持多种类型的数据结构,如字符串(strings)散列(hashes)列表(lists)集合(sets)有序集合(sorted sets) 与范围查询,bitmapshyperloglogs地理空间(geospatial) 索引半径查询。 Redis 内置了复制(replication)LUA脚本(Lua scripting)LRU驱动事件(LRU eviction)事务(transactions) 和不同级别的磁盘持久化(persistence), 并通过Redis哨兵(Sentinel)和自动分区(Cluster)提供高可用性(high availability)。

1.1、Redis自动配置

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency>

在这里插入图片描述

  • RedisAutoConfiguration 自动配置类;RedisProperties 属性类;spring.redis.xxx :对redis配置
  • @Import({LettuceConnectionConfiguration.class, JedisConnectionConfiguration.class}):LettuceConnectionConfiguration.class 导入客户端类型LettuceConnectionFactory 连接工厂也是配置好的;
    JedisConnectionConfiguration.class 导入客户端类型JedisConnectionFactory 连接工厂也是配置好的;
  • 容器自动注入RedisTemplate<Object, Object>
  • 容器自动注入StringRedisTemplatekey:value,二者都是String类型
  • 允许keyvalue 二者都是object类型
  • 在这底层中只有我们使用StringRedisTemplateRedisTemplate就可以操作redis

redis环境搭建

1、阿里云按量付费redis。经典网络

2、申请redis的公网连接地址

3、白名单设置,127.0.0.1仅仅本机访问,修改白名单允许0.0.0.0/0 允许所有地址访问

1.2、RedisTemplate与Lettuce

/**
 * 测试连接整合redis
 */@TestvoidtestRedis(){ValueOperations<String,String> operations= stringRedisTemplate.opsForValue();
    operations.set("hello","world");String hello= operations.get("hello");System.out.println("hello:"+hello);}

1.3、切换至jedis

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency><!-- jedis --><dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId></dependency>
#      redis配置spring:redis:host: r-7xvnzvfphwycfwzzi7pd.redis.rds.aliyuncs.com#公网地址port:6379#端口号password: admin:admin#账号:密码client-type: jedis#切换客户机为 jedis 或者 lettucejedis:pool:max-active:10#最大活动数min-idle:5#最小空闲

实例:

@ComponentpublicclassRedisUrlCountInterceptorimplementsHandlerInterceptor{@AutowiredStringRedisTemplate redisTemplate;/**
     * 目标方法执行之前,每次requestURI就会计数加1
     * @param request
     * @param response
     * @param handler
     * @return
     * @throws Exception
     */@OverridepublicbooleanpreHandle(HttpServletRequest request,HttpServletResponse response,Object handler)throwsException{String requestURI= request.getRequestURI();//默认每次访问,当前requestURI就会计数加1
        redisTemplate.opsForValue().increment(requestURI);returntrue;}}
/**
 * 定制一些spring的一些功能
 * 1、编写一个拦截器实现WebMvcConfigurer接口
 * 2、拦截器注册到容器中(实现addInterceptors的addInterceptor)
 * 3、拦截所有,静态资源也会被拦截
 * @EnableWebMvc 全面接管spring mvc , 慎用
 *      1。静态资源、视图解析器、以及欢迎页等所以spring官方所列举的自动配置全部失效
 *///@EnableWebMvc@ConfigurationpublicclassAdminConfigimplementsWebMvcConfigurer{/**
     * Filter、Interceptor几乎有相同功能
     * Filter是 Spring Servlet 定义的原生组件,好处:脱离Spring 应用也能使用
     * Interceptor时Spring定义的接口,只能在Spring中用,可以使用Spring的自动装配等功能
     */@AutowiredRedisUrlCountInterceptor redisUrlCountInterceptor;@OverridepublicvoidaddInterceptors(InterceptorRegistry registry){//注册一个自定义拦截器
        registry.addInterceptor(newLoginInterceptor()).addPathPatterns("/**")//拦截哪些请求,/** 表示所有请求,静态资源也会拦截.excludePathPatterns("/","/login","/css/**","/fonts/**","/images/**","/js/**","/static/**","/sql","/acct","/city");//放行请求

        registry.addInterceptor(redisUrlCountInterceptor).addPathPatterns("/**")//拦截哪些请求,/** 表示所有请求,静态资源也会拦截.excludePathPatterns("/","/login","/css/**","/fonts/**","/images/**","/js/**","/static/**","/sql","/acct","/city");//放行请求}}
packagecom.atguigu.boot2.controller;importcom.atguigu.boot2.bean.Account;importcom.atguigu.boot2.bean.City;importcom.atguigu.boot2.bean.User;importcom.atguigu.boot2.service.AccountService;importcom.atguigu.boot2.service.CityService;importcom.atguigu.boot2.service.impl.AccountServiceImpl;importcom.atguigu.boot2.service.impl.CityServiceImpl;importlombok.extern.slf4j.Slf4j;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.data.redis.core.StringRedisTemplate;importorg.springframework.data.redis.core.ValueOperations;importorg.springframework.jdbc.core.JdbcTemplate;importorg.springframework.stereotype.Controller;importorg.springframework.ui.Model;importorg.springframework.util.StringUtils;importorg.springframework.web.bind.annotation.*;importjavax.servlet.http.HttpSession;/**
 * @Description:
 * @ClassNmae: IndexController
 * @Author: aowu
 * @CreateDate: 2022/6/9 15:40
 * @Version: 1.0
 */@Slf4j@ControllerpublicclassIndexController{@AutowiredStringRedisTemplate stringRedisTemplate;/**
     * 处理一个到 main.html 的请求
     * @return
     */@GetMapping({"/main.html"})publicStringmainPage(HttpSession session,Model model){
        log.info("当前方法是:"+"mainPage");// 是否登录,使用拦截器、过滤器,若是做了拦截器,可以注释掉//        Object loginUser = session.getAttribute("loginUser");//        if (loginUser != null) {//            return "main";//        }else {//            model.addAttribute("msg","请重新登录");//            //回到登录页//            return "login";//        }ValueOperations<String,String> opsForValue= stringRedisTemplate.opsForValue();String s= opsForValue.get("/main.html");String s1= opsForValue.get("/dynamic_table");
        model.addAttribute("mainCount",s);
        model.addAttribute("dynamicCount",s1);return"main";}}
<divclass="row state-overview"><divclass="col-md-6 col-xs-12 col-sm-6"><divclass="panel purple"><divclass="symbol"><iclass="fa fa-gavel"></i></div><divclass="state-value"><divclass="value">[[${mainCount}]]</div><divclass="title">/main.html</div></div></div></div><divclass="col-md-6 col-xs-12 col-sm-6"><divclass="panel red"><divclass="symbol"><iclass="fa fa-tags"></i></div><divclass="state-value"><divclass="value">[[${dynamicCount}]]</div><divclass="title">/dynamicCount.html</div></div></div></div>
<divclass="row state-overview"><divclass="col-md-6 col-xs-12 col-sm-6"><divclass="panel purple"><divclass="symbol"><iclass="fa fa-gavel"></i></div><divclass="state-value"><divclass="value">[[${mainCount}]]</div><divclass="title">/main.html</div></div></div></div><divclass="col-md-6 col-xs-12 col-sm-6"><divclass="panel red"><divclass="symbol"><iclass="fa fa-tags"></i></div><divclass="state-value"><divclass="value">[[${dynamicCount}]]</div><divclass="title">/dynamicCount.html</div></div></div></div>
  • 作者:weixin_45003524
  • 原文链接:https://blog.csdn.net/weixin_45003524/article/details/125226175
    更新时间:2022-10-29 11:55:26