博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
springSession配置redis存session
阅读量:3948 次
发布时间:2019-05-24

本文共 2319 字,大约阅读时间需要 7 分钟。

springSession配置redis存session

HttpSession 回顾

  1. 什么是 HttpSession
    是 JavaWeb 服务端提供的用来建立与客户端会话状态的对象。

Session 共享

  1. 什么是 Session 共享

    是指在一个浏览器访问多个 Web 服务时,服务端的 Session 数据需要共享。

  2. Session 共享应用场景

    • List item单点登录
    • Web 服务器集群等场景
  3. Session 共享常见的解决方案

    Session 复制

    通过对应用服务器的配置开启服务器的 Session 复制功能,在集群中的几台服务器之间同步 Session 对象,使得每台服务器上都保存所有的 Session 信息,这样任何一台宕机都不会导致 Session 的数据丢失,服务器使用 Session 时,直接从本地获取。这种方式的缺点也比较明显。因为 Session 需要时时同步,并且同步过程是有应用服务器来完成,由此对服务器的性能损耗也比较大。

    Session 绑定

    利用 hash 算法,比如 nginx 的 ip_hash,使得同一个 Ip 的请求分发到同一台服务器上。 这种方式不符合对系统的高可用要求,因为一旦某台服务器宕机,那么该机器上的 Session 也就不复存在了,用户请求切换到其他机器后没有 Session,无法完成业务处理。

    利用 Cookie 记录 Session

    Session 记录在客户端,每次请求服务器的时候,将 Session 放在请求中发送给服务器, 服务器处理完请求后再将修改后的 Session 响应给客户端。这里的客户端就是 cookie。 利用 cookie 记录 Session 的也有缺点,比如受 cookie 大小的限制,能记录的信息有限, 安全性低,每次请求响应都需要传递 cookie,影响性能,如果用户关闭 cookie,访问就不正常。

    Session 服务器

    Session 服务器可以解决上面的所有的问题,利用独立部署的 Session 服务器统一管理 Session,服务器每次读写 Session 时,都访问 Session 服务器。 对于 Session 服务器,我们可以使用 Redis 或者 MongoDB 等内存数据库来保存 Session 中的数据,以此替换掉服务中的 HttpSession。达到 Session 共享的效果。

SpringSession的简介

Spring Session 是 Spring 的项目之一。Spring Session 提供了一套创建和管理 Servlet HttpSession 的方案,默认采用外置的 Redis 来存储 Session 数据,以此来解决 Session 共享的 问题。

1.创建一个父项目空的maven项目

2.创建一个子模块为setter
在这里插入图片描述
2.修改application.yml文件

server:  port: 7000spring:  redis:    url: redis://localhost:6379    database: 0  session:    store-type: redis

3.编写SetterController.class

package com.xxx.proj.controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;import javax.servlet.http.HttpSession;@RestControllerpublic class SetterController {
@RequestMapping("/") public String setter(HttpSession session) {
session.setAttribute("USER", "platov"); return "OK"; }}

4.创建getter模块

在这里插入图片描述
5.修改application.yml文件

server:  port: 8000spring:  redis:    url: redis://localhost:6379    database: 0  session:    store-type: redis

6.编写getter模块

package com.xxx.proj.controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;import javax.servlet.http.HttpSession;@RestControllerpublic class GetterController {
@RequestMapping("/") public String getter(HttpSession session) {
return session.getAttribute("USER") + ""; }}

运行后可以看到结果,如果发现运行不起,应该是redis服务没启动的原因

在这里插入图片描述

转载地址:http://lqrwi.baihongyu.com/

你可能感兴趣的文章
微信小程序——解决微信小程序B接口生成小程序码中scene参数的存放和获取问题
查看>>
Springboot2中内置tomcat解决请求头过长异常 java.lang.IllegalArgumentException: Request header is too large
查看>>
Javase->Javaee->Javaweb联系与区别
查看>>
c语言中关于int *p = &a 的解读
查看>>
解决Springboot2中无法访问在static/image/中的静态图片!终于解决啦
查看>>
IDEA搭建Springboot+SpringMVC+Mybatis+Mysql(详细、易懂)
查看>>
牛客网华为机试——合并表记录
查看>>
算数基本定理
查看>>
Sliding Window(POJ-2823)
查看>>
A. Greed CodeForces - 892A
查看>>
最短路 HDU - 2544
查看>>
7-12 列车厢调度(25 分)
查看>>
7-5 表达式转换(25 分)
查看>>
一个人的旅行 HDU - 2066
查看>>
浪里个浪 FZU - 2261 (多源最短路问题)
查看>>
D - Sorting It All Out POJ - 1094 (拓扑排序)
查看>>
Reward HDU - 2647 (拓扑排序)
查看>>
Divide by three, multiply by two CodeForces - 977D (拓扑排序)
查看>>
Big Event in HDU HDU - 1171 (多重背包)
查看>>
最长子序列长度 (动态规划 O(N^2))
查看>>