redis的安装可以参照博主的另一篇文章: linux下安装redis4.0.11
springboot2.0整合redis可以参照博主的另一篇文章: springboot2.0整合redis
在分布式项目中,为了保持无状态的应用,用redis做session服务器。springsession可以和redis很好的配合。
4.0.0
com.example
demo
0.0.1-SNAPSHOT
jar
demo
Demo project for Spring Boot
org.springframework.boot
spring-boot-starter-parent
2.0.4.RELEASE
UTF-8
UTF-8
1.8
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-starter-test
test
org.springframework.boot
spring-boot-starter-data-redis
com.fasterxml.jackson.core
jackson-databind
org.springframework.session
spring-session-data-redis
org.springframework.boot
spring-boot-maven-plugin
server:
port: 8080
# redis相关配置
spring:
redis:
database: 0
host: redis服务器IP
port: 6379
password: 密码
package com.example.demo.config;
import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.PropertyAccessor;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;
import org.springframework.session.data.redis.config.annotation.web.http.EnableRedisHttpSession;
/**
* @author yuanshushu
* @date 2018/9/1
* @description REDIS配置类
*/
@Configuration
@EnableRedisHttpSession
public class RedisConfig {
@Bean
public RedisTemplate
打印session信息和向session中存储用户信息
package com.example.demo.controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
import java.util.HashMap;
import java.util.Map;
/**
* @author yuanshushu
* @date 2018/9/1
* @description SESSION控制类
*/
@RestController
public class SessionController {
@GetMapping("/test")
public Map testSessionId(HttpServletRequest request) {
Map sessionIdPortMap = new HashMap();
// 获取session信息
sessionIdPortMap.put("sessionId:", request.getSession().getId());
sessionIdPortMap.put("服务器端口:", request.getServerPort());
// 向session中保存用户信息 key规则: user + "_" + uid
request.getSession().setAttribute("user_1", "{uid:1,username:[email protected]}");
return sessionIdPortMap;
}
}
打印session信息和获取session中用户信息
package com.example.demo.controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
import java.util.HashMap;
import java.util.Map;
/**
* @author yuanshushu
* @date 2018/9/1
* @description SESSION控制类
*/
@RestController
public class SessionController {
@GetMapping("/test")
public Map testSessionId(HttpServletRequest request) {
Map sessionIdPortMap = new HashMap();
// 获取session信息
sessionIdPortMap.put("sessionId:", request.getSession().getId());
sessionIdPortMap.put("服务器端口:", request.getServerPort());
// 获取session中uid为1的用户的信息
String user_1 = (String) request.getSession().getAttribute("user_1");
sessionIdPortMap.put("user_1", user_1);
return sessionIdPortMap;
}
}
package com.example.demo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
启动项目,访问http://localhost:8080/test路径,页面返回如下:
此时,可以通过redis desktop manager查看,有一个session生成,时间默认为半小时。
此时,将项目复制一份,端口改为8081,访问http://localhost:8081/test,仍然得到相同的sessionId,并可以得到session中存储的用户信息:
说明session已经被redis共享了。
此时,如果将项目关闭,再启动,仍然会是这个sessionId(默认半小时失效)。
在项目中,可以通过一个工具类,封装获取session的方法,然后对该session做操作。