当前位置: 首页 > news >正文

SpringBoot+Session+redis实现分布式登录

SpringBoot+Session+Redis实现分布式登录功能实现

文章目录

目录

文章目录

前言

一、引库

二、修改配置文件

三、使用

四、解决乱码问题

1.引库

2.配置redis序列化

3.配置Session-Redis序列化



前言

这里简单介绍一下,如果你想多台机器部署你的项目的话,在登录方面如果你用到了session的话,因为session中的登录信息是存放到内存中的,多机部署的话,假设你在A机器登录了,但是获取信息的时候查到了B机器,可是B机器根本就没有你的登录信息就会导致抛给用户,让用户重新登陆,可是如果有100台机器呢,意味着要登陆100遍吗,不合适,所以就需要把用户的登录信息存储下来,有什么方式吗?

  1. 使用Mysql数据库
  2. 使用Redis缓存

这里就考虑一个问题了,如果说登陆的用户信息太多的话,Mysql数据库会不会影响查询速度,也就是Qps,所以这个时候redis就可以完美的避开这种影响


一、引库

这里我用的springBoot版本是2.6.4,所以下面的两个库我选择了相同版本,如果你的项目用到了别的SpringBoot版本的话更换版本就可以

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

二、修改配置文件

  # redis配置
spring:redis:port: 6379host: localhostdatabase: 0# session 失效时间(分钟)session:timeout: 86400store-type: redis

其实这里主要就是store-type设置成为redis就好

三、使用

 这样的话你登录之后用户信息就会存储到redis中了

但是此时就出来了一个问题,那就是乱码了,接下来解决它

四、解决乱码问题

1.引库

          <!--Jackson JSON--><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId></dependency>

2.配置redis序列化

package com.yupi.xinggui.config;import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.RedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;
import org.springframework.session.data.redis.config.annotation.web.http.EnableRedisHttpSession;@Configuration
public class RedisConfig {@Beanpublic RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {RedisTemplate<String, Object> template = new RedisTemplate<>();template.setConnectionFactory(redisConnectionFactory);// 使用StringRedisSerializer来序列化和反序列化redis的key值template.setKeySerializer(new StringRedisSerializer());// 使用GenericJackson2JsonRedisSerializer来序列化和反序列化redis的value值template.setValueSerializer(new GenericJackson2JsonRedisSerializer());template.setHashKeySerializer(new StringRedisSerializer());template.setHashValueSerializer(new GenericJackson2JsonRedisSerializer());template.afterPropertiesSet();return template;}
}

3.配置Session-Redis序列化

package com.yupi.xinggui.config;import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.RedisSerializer;
import org.springframework.session.data.redis.config.annotation.web.http.EnableRedisHttpSession;@Configuration
@EnableRedisHttpSession
public class SessionConfig {/*** 配置Spring Session的默认Redis序列化器。* * 本方法旨在提供一个自定义的Redis序列化器,用于在Spring Session中序列化和反序列化会话数据。* 选择GenericJackson2JsonRedisSerializer是因为它支持将Java对象序列化为JSON格式,* 这样可以在Redis中存储更复杂的会话属性,而不仅仅是简单的字符串或数字。* * @return GenericJackson2JsonRedisSerializer 实例,用于序列化和反序列化会话数据。*/@Beanpublic RedisSerializer<Object> springSessionDefaultRedisSerializer() {return new GenericJackson2JsonRedisSerializer();}}

现在就可以看到用户信息了

 今日时间2024年7月20日,希望这篇博客可以帮助到你,愿你天天开心

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 深度学习之DeepMind的MuZero
  • 初学51单片机之指针基础与串口通信应用
  • C#进阶-基于.NET Framework 4.x框架实现ASP.NET WebForms项目IP拦截器
  • WSL 2 Oracle Linux 9.1 安装配置
  • MySQL(1)
  • 配置RIPv2的认证
  • 详解Stable Diffusion 原理图
  • excel批量新建多个同类型的表格
  • 【深入理解SpringCloud微服务】深入理解Eureka核心原理
  • 43 华三AC登录Web页面
  • STM32测测速---编码电机读取速度的计算
  • 【微服务】feign使用
  • 独立开发的在线客服系统出海记
  • Codeforces Round 959 (Div. 1 + Div. 2 ABCDEFG 题) 文字讲解+视频讲解
  • 【BUG】已解决:zipfile.BadZipFile: File is not a zip file
  • 9月CHINA-PUB-OPENDAY技术沙龙——IPHONE
  • 【5+】跨webview多页面 触发事件(二)
  • 【comparator, comparable】小总结
  • 2017届校招提前批面试回顾
  • gulp 教程
  • hadoop入门学习教程--DKHadoop完整安装步骤
  • If…else
  • iOS动画编程-View动画[ 1 ] 基础View动画
  • Javascript基础之Array数组API
  • JWT究竟是什么呢?
  • Mac 鼠须管 Rime 输入法 安装五笔输入法 教程
  • Mysql5.6主从复制
  • Redis字符串类型内部编码剖析
  • Swift 中的尾递归和蹦床
  • 动态魔术使用DBMS_SQL
  • 聚簇索引和非聚簇索引
  • 聊聊hikari连接池的leakDetectionThreshold
  • 前端面试之闭包
  • 如何设计一个微型分布式架构?
  • 使用 Docker 部署 Spring Boot项目
  • 使用权重正则化较少模型过拟合
  • 首页查询功能的一次实现过程
  • 小程序滚动组件,左边导航栏与右边内容联动效果实现
  • 学习Vue.js的五个小例子
  • #前后端分离# 头条发布系统
  • (1)虚拟机的安装与使用,linux系统安装
  • (4)STL算法之比较
  • (day 2)JavaScript学习笔记(基础之变量、常量和注释)
  • (php伪随机数生成)[GWCTF 2019]枯燥的抽奖
  • (附源码)基于SSM多源异构数据关联技术构建智能校园-计算机毕设 64366
  • (没学懂,待填坑)【动态规划】数位动态规划
  • (免费领源码)Java#Springboot#mysql农产品销售管理系统47627-计算机毕业设计项目选题推荐
  • (三)Hyperledger Fabric 1.1安装部署-chaincode测试
  • (十二)Flink Table API
  • (十六)视图变换 正交投影 透视投影
  • (详细版)Vary: Scaling up the Vision Vocabulary for Large Vision-Language Models
  • .\OBJ\test1.axf: Error: L6230W: Ignoring --entry command. Cannot find argumen 'Reset_Handler'
  • .NET Core 成都线下面基会拉开序幕
  • .Net Core 微服务之Consul(二)-集群搭建
  • .NET 跨平台图形库 SkiaSharp 基础应用