Spring Boot整合Spring session

一、环境搭建

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

二、application配置文件

spring:
   redis:
    host: 39.106.207.96
    port: 6379
  session:
    store-type: redis
    timeout: 30

具体配置介绍如下:

1.spring.session.store-type=redis

设置 Spring Session 使用 Redis 进行存储。默认配置就是 redis

spring.session.timeout=10m
设置 Spring Session 的过期时间。如果不指定单位模式是 s。
也可以通过在启动类上声明@EnableRedisHttpSession进行配置。
例如:@EnableRedisHttpSession(maxInactiveIntervalInSeconds = 3600)

2.spring.session.redis.flush-mode=on_save

两种刷新模式

on_save
保存时刷新,即响应结束后刷新。默认是 on_save
immediate
实时刷新
也可以通过在启动类上声明@EnableRedisHttpSession进行配置。
例如:@EnableRedisHttpSession(redisFlushMode = RedisFlushMode.ON_SAVE)

3.spring.session.redis.namespace=redis:session

存储 Session的命名空间,默认是spring:session。

三、配置Sesssion全域名有效以及序列化

以javabean的形式配置

@Configuration
//配置Session序列号机制
public class SessionConfig {
    @Bean
    public CookieSerializer cookieSerializer()
    {
        DefaultCookieSerializer cookieSerializer = new DefaultCookieSerializer();
        //cookieSerializer.setDomainName(".njithome.com");//设置Cookie在njithome所有的子域下都有效
        cookieSerializer.setCookieName("NJITSESSION");//设置名字
        return cookieSerializer;
    }


    @Bean
    //以JSON的形式存入redis
    public RedisSerializer<Object> springSessionDefaultRedisSerializer()
    {
        return new GenericJackson2JsonRedisSerializer();
    }
}

四、测试demo

在一个微服务存session

@GetMapping("/login")
    public R login(HttpServletRequest request)
    {
        HttpSession session = request.getSession();
        session.setAttribute("user","张大炮");
        System.out.println(session.toString());
        return R.ok();
    }

可以看到Cookie当中已经携带了NJITSESSION
在这里插入图片描述
在Redis中存储的结构
在这里插入图片描述

第一组:String结构,用于ttl过期时间记录

在这里插入图片描述

第二组:hash结构,spring-session存储的主要内容
在这里插入图片描述

第三组:set结构,过期时间记录
spring:session:sessions:expires:feb6588d-0040-4738-89ef-5e14f4297a2c
简单提一下:redis清除过期key的行为是一个异步行为且是一个低优先级的行为,用文档中的原话来说便是,可能会导致session不被清除。于是引入了专门的expiresKey,来专门负责session的清除,包括我们自己在使用redis时也需要关注这一点。
在这里插入图片描述

在另一个微服务取出

 @GetMapping("/login")
    public R getloin(HttpServletRequest request)
    {
        HttpSession session = request.getSession();
        Object user = session.getAttribute("user");
        return R.ok().put("user",user);
    }

在这里插入图片描述

五、Spring session原理简介

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值