一、本地环境
-
操作系统:Mac OS X 10.13.2
-
编辑器:IntelliJ IDEA 2017
-
JDK版本:jdk 1.8
-
Maven版本:apache-maven-3.5.0
-
SpringBoot版本:SpringBoot 1.5.17
二、pom依赖文件
<!-- 集成redis -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!-- 集成spring-session -->
<dependency>
<groupId>org.springframework.session</groupId>
<artifactId>spring-session-data-redis</artifactId>
</dependency>
三、本地安装redis
1、下载redis
进入redis官网,下载需要的版本(我现在的是redis 4.0)。
2、安装redis(Mac)
-
使用root权限:
sudo -i -
解压:
tar zxvf redis-4.0.11.tar.gz -
移动到:
mv redis-4.0.11 /usr/local/ -
切换到:
cd /usr/local/redis-4.0.11/ -
编译测试
sudo make test -
编译安装
sudo make install
3、设置后台运行并启动redis
-
编辑redis配置文件:
vim redis.conf -
修改
daemonize no为daemonize yes -
进入src目录:
cd src -
启动服务:
redis-server ../redis.conf -
启动客户端:
redis-cli
4、错误排除
我以前在mac上装过别的版本的redis,导致版本冲突:
make[1]: *** [test] Error 1
make: *** [test] Error 2
解决这个错误,执行下面的语句即可:
make distclean
make
make test
四、配置文件以及工程结构
1、配置文件
application.yml
server:
port: 10008
spring:
redis:
host: localhost
port: 6379
password:
2、目录结构
五、编写代码
1、开启redis存储session功能
@EnableRedisHttpSession
@SpringBootApplication
public class ServiceSessionApplication {
public static void main(String[] args) {
SpringApplication.run(ServiceSessionApplication.class, args);
}
}
增加注解@EnableRedisHttpSession来开启功能
2、增加session操作
@RestController
public class SessionController {
@Autowired
private HttpServletRequest request;
@Value("${server.port}")
private String port;
@GetMapping("/session/post")
public Map<String, Object> getSession() {
HttpSession session = request.getSession();
session.setAttribute("username", "zhuqiwei");
Map<String, Object> result = Maps.newHashMap();
result.put("sessionId", session.getId());
result.put("port", port);
return result;
}
@GetMapping("/session/get")
public String get() {
HttpSession session = request.getSession();
return (String) session.getAttribute("username") + "----" + port;
}
}
因为要验证集群环境下
session是否同步,所以增加port字段用来识别当前服务器。
getSession()方法用来生成session并且增加参数username。
get()方法用来再另一台服务器上通过session获取增加的参数username的数值。
六、运行环境测试
1、运行集群环境
-
先启动
端口号为10007的服务 -
编辑
Edit Configurations...,勾掉Single instance only选项
- 修改
端口号为10008,再次启动服务
2、测试
浏览器上访问http://localhost:10007/session/post,返回以下结果
{
"port": "10007",
"sessionId": "bce6d8c4-0e18-4de7-98f7-6f1948b8e204"
}
继续浏览器上访问http://localhost:10008/session/get,返回以下结果:zhuqiwei----10008
说明集群服务器之间Session确实进行了同步