Spring boot - 使用redis实现session共享

在分布式系统架构的系统中,我们如何保证session的一致性,其中之一的解决方式就是session共享形式,在SpringBoot框架中如何使用session达成共享呢,我们可以借助指定Redis实现存储管理。

一、pom中添加session-redis 依赖

此依赖不同于之前的redis依赖,pom依赖如下


    org.springframework.session
    spring-session-data-redis

二、application.properties 中指定session的存储类型

#session存储类型
spring.session.store-type=redis
#设置session超时时间
server.session.timeout=14400
spring.redis.host=127.0.0.1
spring.redis.port=6379

三、接口中使用

我们简单的写了一个模拟登陆 退出的接口,并写了一个查询session中的接口 接口类如下

com.demo.controller.UserController

package com.demo.controller;

import javax.servlet.http.HttpSession;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;

import com.demo.bean.User;

@Controller
@RequestMapping(value="/user")
public class UserController {

	@ResponseBody
	@RequestMapping(value="/login",method=RequestMethod.GET)
	public User login(HttpSession session){
		User user = new User();
		user.setId("11111");
		user.setName("zhangsan");
		session.setAttribute("user", user);
		return user;
	}
	
	@ResponseBody
	@RequestMapping(value="/logout",method=RequestMethod.GET)
	public void logout(HttpSession session){
		session.invalidate();
	}
	
	@ResponseBody
	@RequestMapping(value="/getUserInfo",method=RequestMethod.GET)
	public User getUserInfo(HttpSession session){
		return  (User)session.getAttribute("user");
	}

}

由于我们会将对象通过session存储在redis中,所以该对象必须序列化,故我们的User对象需要实现 java.io.Serializable 接口。

session.invalidate();可以清除session中的键值。

四、访问测试

我们访问登录接口http://127.0.0.1:8080/WebDemo/user/login 

然后我们访问查询接口http://127.0.0.1:8080/WebDemo/user/getUserInfo

Spring boot - 使用redis实现session共享_第1张图片
接着我们在访问退出接口http://127.0.0.1:8080/WebDemo/user/logout

然后我们继续访问查询接口http://127.0.0.1:8080/WebDemo/user/getUserInfo
Spring boot - 使用redis实现session共享_第2张图片

以及如果我们停掉服务器,在重启服务器后,访问session数据 依然可以获取到。
 

你可能感兴趣的:(SpringBoot)