首页 > 数据库 >使用Spring boot基于Redis快速搭建分布式Session缓存方案

使用Spring boot基于Redis快速搭建分布式Session缓存方案

时间:2022-09-28 15:05:42浏览次数:48  
标签:username redis String Session Spring boot Redis session spring


使用Spring boot基于Redis快速搭建分布式Session缓存方案

大型web应用中,session的管理非常重要,这是单机存储满足不了的.

通常有以下几种方法:

  1. 将session持久化到数据库中. 但缺点是读写成本太高.
  2. 去session化,比如将信息存储到cookie中. 但缺点是大小有限制,并且不安全.

3 . 将session存储到一个分布式的nosql数据库中,比如 Redis.

接下来就介绍一下 在SpringBoot应用中如何快速搭建一个基于Redis的分布式session存储方案

第一步:搭建Spring Boot开发环境

添加maven核心依赖 spring-session-data-redis

<!--基于redis的分布式session存储-->
<dependency>
<groupId>org.springframework.session</groupId>
<artifactId>spring-session-data-redis</artifactId>
</dependency>

在application.properties文件中配置redis连接属性

######   Redis config start ######
spring.redis.database=0
spring.redis.host=192.168.41.60
spring.redis.port=6379
spring.redis.password=
spring.redis.pool.max-active=20
spring.redis.pool.max-wait=-1
spring.redis.pool.max-idle=8
spring.redis.pool.min-idle=0
spring.redis.timeout=0
###### Redis config end ######

第二步:开启 @EnableRedisHttpSession 注解

@Configuration
@EnableRedisHttpSession(redisNamespace = "mysession",maxInactiveIntervalInSeconds = 60*60*24)
public class SessionConfig

@EnableRedisHttpSession注解的源码如下,可以看到可以配置三个参数:

  • maxInactiveIntervalInSeconds :session中的数据的过期时间(不是session在redis中的过期时间)
  • redisNamespace :命名空间,可以配置当前应用的名称,我这里配置了 mysession.
  • redisFlushMode :redis保存session的方式,默认 ON_SAVE
    有两种方式:IMMEDIATE:一旦创建session的时候就立即保存.ON_SAVE:创建session的时候不会保存,但当往session中添加数据的时候就会保存
@Retention(java.lang.annotation.RetentionPolicy.RUNTIME)
@Target({ java.lang.annotation.ElementType.TYPE })
@Documented
@Import(RedisHttpSessionConfiguration.class)
@Configuration
public @interface EnableRedisHttpSession
int maxInactiveIntervalInSeconds() default 1800;

String redisNamespace() default "";

RedisFlushMode redisFlushMode() default

第三步:测试

编写一个controller

@RestController
public class HelloController

@RequestMapping("/hello/{username}")
public String hello(HttpSession session, @PathVariable(value = "username") String username) {
session.setAttribute("username", username);
return "保存session到Redis成功";
}

@RequestMapping("/getName")
public String getUsername(HttpSession session) {
String username = (String) session.getAttribute("username");
return

当浏览器访问 ​​http://localhost:8080/hello/admin​​ 这个链接,

hello方法会接受到 浏览器传过来的参数,并保存在session中,然后再把session保存到Redis中

通过查看redis中的信息可看到如下信息:

其中 spring:session 是自动添加的,我们创建的命名空间 mysession 在这个默认的目录下面

接下来我们再访问 ​​http://localhost:8080/getName​​ ,便可以看到浏览器会显示 刚才我们保存再session中的 admin

小结:

上面结合示例代码介绍了数据缓存,共享Session两个Redis的典型应用场景.

除此之外,还有分布式锁,全局计数器等高级应用场景,以后在其他文章中再详细介绍.



标签:username,redis,String,Session,Spring,boot,Redis,session,spring
From: https://blog.51cto.com/u_13866611/5719426

相关文章

  • idea 从数据库快速生成Spring Data JPA实体类
    idea从数据库快速生成SpringDataJPA实体类第一步,调出Persistence窗口.File—>ProjectStructure—>model—>+—>JPA第二步:打开Persistence窗口配置生成实体类的......
  • Springboot 外置配置详解
    Springboot外置配置springBoot自动配置的bean提供了300多个用于微调的属性.当调整设置时,只需要在环境变量,Java系统属性,JNDI,命令行参数,属性文件进行配置就好了.举例......
  • Spring Security + JWT 实现一个权限系统,写的太好了吧!
    作者:小小____来源:segmentfault.com/a/1190000023052493思维导图如下RBAC权限分析RBAC全称为基于角色的权限控制,本段将会从什么是RBAC,模型分类,什么是权限,用户组的使用......
  • 玩转SpringBoot之定时任务
    玩转SpringBoot之定时任务使用SpringBoot创建定时任务非常简单,目前主要有以下三种创建方式:一、基于注解(@Scheduled)二、基于接口(SchedulingConfigurer)前者相信大家......
  • 深入学习SpringBoot
    1.快速上手SpringBoot1.1SpringBoot入门程序开发SpringBoot是由Pivotal团队提供的全新框架,其设计目的是用来简化Spring应用的初始搭建以及开发过程1.1.1IDEA创建Sp......
  • spring
    依赖注入三种方式:1.构造函数注入:在bean.xml文件的bean标签中添加<constructor-arg>标签<!--构造注入--><beanid="p1"class="com.bai.demo2.entity.Person">......
  • spring事务嵌套回滚的异常问题
    **Transactionrolledbackbecauseithasbeenmarkedasrollback-only”**代码逻辑很简单:try{方法B//抛出异常}catch(Exceptione){//异常打印}异常被try......
  • SpringBoot热部署
    一、引言(devtools)在开发过程中,由于每次修改完项目中的类都需要重启服务才能看到运行的结果,对于开发调试很不友好,浪费时间,引入devtools工具可以快速启动项目,无需再次重启......
  • Spring MVC框架:第二章:视图解析器和@RequestMapping注解使用在类级别及获取原生Servlet
    SpringMVC使用细节第一节视图解析器通过HelloWorld程序我们看到了handler方法的返回值表示:请求处理完成后,请SpringMVC执行一个请求转发。转发的地址就是handler方法的......
  • Spring MVC primary!
    步骤:1.定义一个handler处理器,并且实现controller接口packagejk.handlers;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpSe......