Error message here!

Hide Error message here!

忘记密码?

Error message here!

请输入正确邮箱

Hide Error message here!

密码丢失?请输入您的电子邮件地址。您将收到一个重设密码链接。

Error message here!

返回登录

Close

spring-session用redis实现session共享实践

一天不进步,就是退步 2019-02-12 10:10:00 阅读数:253 评论数:0 点赞数:0 收藏数:0

什么是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

编程之旅,人生之路,不止于编程,还有诗和远方。
阅代码原理,看框架知识,学企业实践;
赏诗词,读日记,踏人生之路,观世界之行;