之前一篇已经写过了《springboot中redis的使用和分布式session共享问题》,但是示例不完全,本文加以完善。
使用spring-session-data-redis解决session共享,而不需要再引入其他jar即可
集成简单,上手迅速。

项目结构

1.png

pom

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><parent><artifactId>easy-boot</artifactId><groupId>com.mos</groupId><version>1.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><artifactId>easy-boot-web</artifactId><packaging>jar</packaging><name>easy-boot-web</name><url>http://maven.apache.org</url><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-configuration-processor</artifactId><version>${spring-boot.version}</version></dependency><!--redis配置开始--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-redis</artifactId></dependency><dependency><groupId>org.springframework.session</groupId><artifactId>spring-session-data-redis</artifactId></dependency><!--redis配置结束--><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><scope>test</scope></dependency></dependencies>
</project>

配置

package com.mos.easyboot.web.config;import org.springframework.cache.CacheManager;
import org.springframework.cache.annotation.CachingConfigurerSupport;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.cache.RedisCacheManager;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;@Configuration
@EnableCaching
public class RedisConfig extends CachingConfigurerSupport {@Beanpublic CacheManager cacheManager(RedisTemplate<?,?> redisTemplate) {CacheManager cacheManager = new RedisCacheManager(redisTemplate);return cacheManager;}@Beanpublic RedisTemplate<String, String> redisTemplate(RedisConnectionFactory factory) {RedisTemplate<String, String> redisTemplate = new RedisTemplate<>();redisTemplate.setConnectionFactory(factory);return redisTemplate;}
}
package com.mos.easyboot.web.config;import org.springframework.context.annotation.Configuration;
import org.springframework.session.data.redis.config.annotation.web.http.EnableRedisHttpSession;@Configuration
@EnableRedisHttpSession
public class RedisSessionConfig {
}

properties配置

server.port=8881# Redis数据库索引(默认为0)
spring.redis.database=0
# Redis服务器地址
spring.redis.host=192.168.48.2
# Redis服务器连接端口
spring.redis.port=6379
# Redis服务器连接密码(默认为空)
spring.redis.password=123456789
# 连接池最大连接数(使用负值表示没有限制)
spring.redis.pool.max-active=8
# 连接池最大阻塞等待时间(使用负值表示没有限制)
spring.redis.pool.max-wait=-1
# 连接池中的最大空闲连接
spring.redis.pool.max-idle=8
# 连接池中的最小空闲连接
spring.redis.pool.min-idle=0
# 连接超时时间(毫秒)
spring.redis.timeout=0

测试

编写测试controller
package com.mos.easyboot.web.controller;import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import javax.servlet.http.HttpSession;@RestController
@RequestMapping("demo")
public class DemoController {@RequestMapping("index")public String index(HttpSession session){session.setAttribute("sessionId",session.getId());session.setAttribute("sessionUserId","123");return "test";}@RequestMapping("session")public String session(HttpSession session){String sessionId = session.getAttribute("sessionId").toString();String sessionUserId = session.getAttribute("sessionUserId").toString();return sessionId + "^" +  sessionUserId;}
}

分别启动两个项目,先访问http://localhost:8881/demo/index
再访问http://localhost:8881/demo/session
新打开一个浏览器tab,访问http://localhost:8882/demo/session
最终效果如下(可以看到两个请求获取到的sessionId和session内容都相同,实现session共享):

7.png

再谈session共享相关推荐

  1. 解决nginx负载均衡的session共享问题

    之前有写过ubuntu环境下搭建nginx环境,今天来谈一下nginx session共享问题,查了一些资料,看了一些别人写的文档,总结如下,实现nginx session的共享服务器有多台,用ngi ...

  2. Spring-Redis实现分布式环境下主子域名Session共享

    背景: 之前一直采用通过注解的方式配置Spring环境下的子域名共享,其基本思路是通过将session放入redis中,然后将使用HTTPSESSION更改为使用SpringSession的方式,使得 ...

  3. 再谈进程—从入门到出家

    再谈进程-从入门到出家 这段时间由于工作上用到几个比较基础的进程编程,却发现自己好久没有接触进程了,都狂忘了!不得不感慨几句:老了老了~~~ 趁着对进程的回忆,也总一个简单的总结,下次可以回头看看,也 ...

  4. nginx+tomcat+memcache实现负载均衡、session共享

    实验架构图: Table of Contents 1.配置tomcat 2.安装memcache 3.查看tomcat和memcache是否配置好 4.nginx实现负载均衡: 5.客户端进行测试: ...

  5. Redis + Tomcat + Nginx 集群实现 Session 共享

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 作者 | 蕃薯耀 链接 | www.cnblogs.com/fan ...

  6. php java session共享_php 函数session_id()思考。实现同服务器下session共享

    session_id() session_id() 存取目前 session 代号. 语法: string session_id(string [id]); 本函数可取得或者重新配置目前存放 Sess ...

  7. 分布式架构下,Session 共享有什么方案?

    来自:会点代码的大叔 分布式架构下的 Session 共享,也称作分布式 Session 一致性:分布式架构下 Session 共享有哪些问题,又有哪些解决方案,让我们一起看一下. 01 Sessio ...

  8. .netcore 如何获取系统中所有session_集群化部署,Spring Security 要如何处理 session 共享?

    前面和大家聊了 Spring Security 如何像 QQ 一样,自动踢掉已登录用户(Spring Boot + Vue 前后端分离项目,如何踢掉已登录用户?),但是前面我们是基于单体应用的,如果我 ...

  9. 使用Memcached实现Session共享

    由于Cookie是保存的用户客户端的,安全性存在问题,为保证用户数据的安全性,我们必须使用Session机制来保存用户登录后的一些信息. 如果我们使用LVS对Apache实现负载均衡,就无法保证用户每 ...

最新文章

  1. [面试]future模式
  2. MOSS2007 无法上传超过30M或者50M的大文件解决办法 (转)
  3. Redis数据分布一致性哈希
  4. Ajax — cropper (图片剪裁)基本用法
  5. svn认证失败,解决方案
  6. 【黑马程序员济南】我的“黑马”经历
  7. kmeans算法经典案例C语言,kmeans聚类算法以及使用案例
  8. python求斜边上的高_关于如何求直角三角形斜边上的高
  9. 数据中台02:数据中台架构
  10. 柱坐标下多重网格法解泊松方程-python
  11. 英语关于计算机游戏作文,沉迷网络游戏的英语作文(精选5篇)
  12. 电子信息类的就业前景真的不如计算机吗?
  13. nordic 52832中添加RTT打印
  14. 梧桐新叶让我怀念父亲
  15. 湖南大学计算机考研群2021,湖南大学2021年硕士研究生拟录取名单公示
  16. homeassistant几种安装方式对比,树莓派4docker安装记录
  17. plotly绘制简单图形<7>--用plotly画图参数设置
  18. 解决git clone时出现Failed to connect to github.com port 443: Timed out的问题
  19. 再快一点?动态内容如何加速
  20. 两数之和---------梦开始的地方

热门文章

  1. 顶尖程序员不同于常人的 5 个区别
  2. UnitOfWork以及其在ABP中的应用
  3. ASP.Net中的TreeView控件中对节点的上移和下移操作
  4. RequisitePro SQL SERVER数据库的配置
  5. 两道面试题,带你解析Java类加载机制
  6. 1.试述大数据对思维方式的重要影响。 2.详细阐述大数据、云计算、物联网之间的区别与联系。 3.简述你对大数据应用与发展的看法,以及你在这次大数据浪潮中想扮演什么角色。...
  7. 你需要了解的load和initialize
  8. 《Ansible权威指南 》一 第一篇 Part 1 基础入门篇
  9. 泛前端知识图谱(Web/iOS/Android/RN)
  10. 查看linux是多少位的