亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

Redis共享Session原理及示例

標簽:
Java SpringBoot

Redis共享session的作用

  • 微服务自身可以保持无状态,应用实例数量的多少不会影响用户登录状态;
  • 可实现单点登录的踢出功能,如可以让上次异地登录的用户下线;
  • session在多个服务或服务器间共享,实现多站点单点登录(参考SSO原理)

Redis缓存session原理简述

其工作原理,可简单用图描述(假设服务A运行有有个多个实例):
图片描述

Springboot-session结合Redis示例

  • 添加maven依赖
<dependency>  
	<groupId>org.springframework.boot</groupId>  
	<artifactId>spring-boot-starter-redis</artifactId>
	<version>1.4.0.RELEASE</version>
</dependency>  
<dependency>  
	<groupId>org.springframework.session</groupId>  
	<artifactId>spring-session-data-redis</artifactId>  
</dependency>
<dependency>
	<groupId>org.springframework.session</groupId>
	<artifactId>spring-session</artifactId>
	<version>1.3.3.RELEASE</version>
</dependency>
  • 添加redis配置(application.properties)
spring.redis.database=1  
spring.redis.host=localhost
spring.redis.password=xxxxx
spring.redis.port=6379

# server.port=8080
server.port=8081
  • 添加配置类
package com.example.demo.config;

import org.springframework.context.annotation.Configuration;
import org.springframework.session.data.redis.config.annotation.web.http.EnableRedisHttpSession;

@Configuration  
@EnableRedisHttpSession  
public class RedisSessionConfig {  
}
  • 添加controller
package com.example.demo.controller;

import java.util.*;
import javax.servlet.http.HttpServletRequest;

import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

@RestController  
@RequestMapping(value = "/")
public class Hello {  
    @RequestMapping(value = "/set", method = RequestMethod.GET)  
    public Map<String, Object> firstResp (HttpServletRequest request){           
        request.getSession().setAttribute("testKey", "testValue");

        Map<String, Object> map = new HashMap<>(); 
        map.put("testKey", "testValue");  
        return map;
    }
  
    @RequestMapping(value = "/query", method = RequestMethod.GET)  
    public Object sessions (HttpServletRequest request){
        Map<String, Object> map = new HashMap<>();
        map.put("sessionId", request.getSession().getId());
        map.put("testKey", request.getSession().getAttribute("testKey"));
        return map;
    }
} 
  • 浏览器访问测试

    • 启动两个springboot程序,分别监听8080,8081端口
    • 浏览器分别访问http://127.0.0.1:8080/set, 127.0.0.1:8081/query接口,效果如下:
      图片描述
    • 查看redis中的key
      图片描述

可以看出两个独立的应用已经共享了同一个session。

點擊查看更多內容
4人點贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優質文章

正在加載中
全棧工程師
手記
粉絲
246
獲贊與收藏
201

關注作者,訂閱最新文章

閱讀免費教程

感謝您的支持,我會繼續努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
今天注冊有機會得

100積分直接送

付費專欄免費學

大額優惠券免費領

立即參與 放棄機會
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號

舉報

0/150
提交
取消