SpringBoot + Redisの分散セッション・ソリューション
序文
シーン:
私たちは、プロジェクトのアプリケーションクラスタを設定すると、セッション共有に問題があります。セッションは、上記のサーバーに保存されているため。
ソリューション:
達成されたバインディングのIP ;. Bバランシングnginxの負荷によって(そのうちの一つを結合IPサーバでは、クラスタの概念はありません)
クッキーのデータがクライアントに保存されているので(クッキーバックアップセッションによって実装されています。したがって、安全でない)
。CはRedisのバックアップによってセッション)(信頼性を達成しました。
共有セッションを達成するためにSpringBoot + springsession + Redisの
注意:あなたはRedisのサーバーを設定する前に
導入1、ポンポン
<!--redis-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!--全局session-->
<dependency>
<groupId>org.springframework.session</groupId>
<artifactId>spring-session-data-redis</artifactId>
</dependency>
2、プロファイル設定
# Redis settings
spring.redis.database=2
spring.redis.host=127.0.0.1
spring.redis.port=6379
spring.redis.password=
spring.redis.ssl=false
# 连接池最大连接数(使用负值表示没有限制)
spring.redis.jedis.pool.max-active=100
# 连接池最大阻塞等待时间(使用负值表示没有限制)
spring.redis.jedis.pool.max-wait=
# 连接池中的最大空闲连接
spring.redis.jedis.pool.max-idle=8
# 连接池中的最小空闲连接
spring.redis.jedis.pool.min-idle=0
# 连接超时时间(毫秒)
spring.redis.timeout=
spring.session.store-type=redis
図3に示すように、書き込みコントローラ
@RequestMapping(value = "user/session")
public BaseResult session(HttpServletRequest request) {
String userId = (String) request.getSession().getAttribute("userId");
if (StringUtils.isEmpty(userId)) {
log.info("用户session_id为空!");
request.getSession().setAttribute("userId", "001_lxf");
} else {
log.info("用户session_id:" + userId);
}
return BaseResult.success(ResultCode.SUCCESS, userId);
}
4、Mavenのパッケージプロジェクト
mvn clean package -Dmaven.skip.test=true
5、別のポートで二回、各プロジェクトを開始
进入target目录启动项目,指定不同的端口
java -jar xxx_xxx.jar --server.port=8080
java -jar xxx_xxx.jar --server.port=8081
6、デモンストレーション効果
分别访问,查看效果:
http://127.0.0.1:8080/user/session
http://127.0.0.1:8081/user/session