什么是spring session?

Spring Session provides an API and implementations for managing a user’s session information.

简单一句话,spring session帮你管理用户的session信息。

为什么使用spring session?

通常情况下,Tomcat、Jetty等Servlet容器,会默认将Session保存在内存中。如果是单个服务器实例的应用,将Session保存在服务器内存中是一个非常好的方案。但是这种方案有一个缺点,就是不利于扩展。

目前越来越多的应用采用分布式部署,用于实现高可用性和负载均衡等。那么问题来了,如果将同一个应用部署在多个服务器上通过负载均衡对外提供访问,如何实现Session共享?

实际上实现Session共享的方案很多,其中一种常用的就是使用Tomcat、Jetty等服务器提供的Session共享功能,将Session的内容统一存储在一个数据库(如MySQL)或缓存(如Redis)中。

使用spring session有以下好处:

  spring session是开源的用户session管理软件,免费,易控且容易扩展;

  spring session可以使服务器无状态;

  服务器宕机或者重启不会丢失用户session信息,对用户更友好。

  不需要负载均衡器保持粘性

  满足应用和数据隔离原则

为什么使用spring session data redis呢?

  spring session提供了三种主要实现方式REDIS,JDBC,Hazelcast

上一篇文章已经介绍了jdbc的实现  那为什么很多人更喜欢使用Redis实现呢?

  1.应用要求请求响应流畅,快捷,redis是内存服务器,响应很快

   2. 使用redis做外部存储,降低了对数据库或者服务器本身的依赖,更稳定

  3. redis的过期机制更友好

4. redis的分片和集群机制,扩展性更好

5. 简单应用且容易监控

6. 和spring boot集成更紧密。

spring-session-data-redis实战

前段时间,写了篇<spring-session-data-redis解决session共享的问题>文章,介绍了spring-session使用redis存储实现session共享的内部机制,

有读者提问为什么只有理论没有实践?索性就实践一下。

1.使用sts创建spring-boot项目,项目名称session-jdbc,使用redis,web(方便测试)的start,创建完项目如下:

2.增加spring-session-redis依赖

        <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency><dependency><groupId>org.springframework.session</groupId><artifactId>spring-session-data-redis</artifactId></dependency>

3.配置属性

spring.session.store-type=redis
spring.redis.host=localhost
spring.redis.password=
spring.redis.port=6379
spring.session.redis.namespace=spring:session
spring.security.user.name=admin
spring.security.user.password=admin
spring.session.redis.cleanup-cron=0 * * * * *

4.增加测试类

package com.example.demo;import javax.servlet.http.HttpSession;import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
@RequestMapping("/redis")
public class TestController {@RequestMapping("/welcome")public String welcome(HttpSession httpSession) {httpSession.setAttribute("hello", "world");return "hello world !";}
}

5.启动spring boot项目

6.访问http://localhost:8080/redis/welcome

访问前查看redis情况

输入用户名密码 admin/admin

访问后

总结:

spring-session-data-redis 使用redis做用户管理的存储,主要有以下优点:

1.简单易用,用户友好

2.响应快

3.扩展性强

4.稳定性高

5.可监控

参考文献:

【1】https://www.cnblogs.com/jiafuwei/p/6425604.html

转载于:https://www.cnblogs.com/davidwang456/p/10363365.html

spring-session用redis实现session共享实践相关推荐

  1. Spring boot - 使用redis实现session共享

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

  2. php session存到redis,php Session存储到Redis的方法

    php Session存储到Redis的方法 当然要写先安装php的扩展,可参考这篇文章:Redis及PHP扩展安装修改php.ini的设置 复制代码 代码如下: session.save_handl ...

  3. spring boot 整合redis实现session共享

    目录 官方文档,它是spring session项目的redis相关的一个子文档:https://docs.spring.io/spring-session/docs/2.0.0.BUILD-SNAP ...

  4. Spring boot集成Redis实现sessions共享时,sessions过期时间问题分析

    Springboot鼓励零配置的方式,帮你做好大部分重复劳动的事,好到不能再好:具体的Redis安装方法和Springboot集成Redis方法,可以去搜索相关文章或参考该文章http://www.c ...

  5. redis实现session共享,哨兵

    一.Redis介绍 1.redis是key-value的存储系统,属于非关系型数据库 2.特点:支持数据持久化,可以让数据在内存中保存到磁盘里(memcached:数据存在内存里,如果服务重启,数据会 ...

  6. php分布式redis实现session共享

    方法一:找到配置文件php.ini,修改为下面内容,保存并重启服务 session.save_handler = redis session.save_path = "tcp://127.0 ...

  7. session存入redis或memcached

    2019独角兽企业重金招聘Python工程师标准>>> session 存入 redis 的 php 配置 安装 redis 安装 phpredis 扩展 编辑 php.ini 配置 ...

  8. php使用redis做缓存,php使用redis做缓存和使用redis保存session

    php使用redis 一.ubuntu上安装php的redis模块 直接使用命令:sudo apt install php-redis 重启php-fpm: /etc/init.d/php7.3-fp ...

  9. php 分布式 session,浅析PHP分布式中Redis实现Session的方法

    本文介绍的是PHP分布式中Redis实现Session的方法,下面话不多说,直接先来看两个方法是什么 方法一: 找到配置文件php.ini,修改为下面内容,保存并重启服务 session.save_h ...

  10. Spring Boot分布式系统实践【扩展1】shiro+redis实现session共享、simplesession反序列化失败的问题定位及反思改进...

    前言 调试之前请先关闭Favicon配置 spring:favicon:enabled: false 不然会发现有2个请求(如果用nginx+ 浏览器调试的话) 序列化工具类[fastjson版本1. ...

最新文章

  1. 【错误记录】Groovy 报错 ( Execution failed for task ‘:compileGroovy‘. > org/apache/tools/ant/taskdefs/Java )
  2. Visual Studio 中粗略的代码行数统计
  3. android EventBus的简单使用
  4. HTTP 遭 Google 抛弃,开发者该如何应对?
  5. 集训8.21树状数组讲解
  6. R-大数据分析挖掘(4-R爬虫实现)
  7. swift 笔记 (二十一) —— 高级运算符
  8. SQL入门:第一章 建立自己的数据库
  9. 网站打开速度的查询 测试
  10. Apache Flink 漫谈系列(12) - Time Interval(Time-windowed) JOIN
  11. 企业信息安全之社工学审计
  12. 用Python在图片上添加文字
  13. 【读图】钢铁侠 Elon Musk 的传奇人生
  14. 建设数据中心机房主要看这几点,否则被定为劣质机房!!!
  15. Android异步消息处理机制之looper机制
  16. java--类单继承多实现,接口多继承
  17. 如何使用加密锁加密自己程序
  18. 计算机图像处理面试题总结
  19. 电脑麦克风输入没声音,如何解决
  20. 基于JAVA大学生规划平台计算机毕业设计源码+系统+lw文档+部署

热门文章

  1. IPv6扩展头部 (一) 扩展头部格式、类型与扩展选项
  2. php 字符串拼接效率,php中3种字符串连接的效率比较实例详解
  3. 在mysql中会话变量前面的字符是什么_在MySQL中仅使用会话变量仅对字符的首次出现执行搜索/替换...
  4. backgroundworker 导致程序无法退出_macOS技巧—六种方法强制退出无响应的程序
  5. 将客户端移植到Linux和MAC OS
  6. 什么是用户对计算机进行配置的重要工具,《计算机常用工具软件》试题1
  7. java sofa rpc_【剖析 | SOFARPC 框架】
  8. 如何添加二级标题_全国计算机二级MS Office高级应用考试指南
  9. python圆柱体,用PYTHON将圆柱体分散到3D XYZ点数据
  10. tensorflow 动态数组 TensorArray