springboot整合redis存放session

springboot-整合redis:做缓存,做分布式共享session springboot-整合redis:做缓存,做分布式共享session 文章目录springboot-整合redis:做缓存,做分布式共享session1.redis应用场景2配置 完整代码下载链接: https://github.com/2010yhh/springBoot-demos.git 环境 idea2018,jdk1.8, springboot版本:springboot1.5.9.... 阅读详情

springboot整合redis存放session

y进入maven依赖:

<!--spring boot 与redis应用基本环境配置 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-redis</artifactId>
        </dependency>
        <!--spring session 与redis应用基本环境配置,需要开启redis后才可以使用,不然启动Spring boot会报错 -->
        <dependency>
            <groupId>org.springframework.session</groupId>
            <artifactId>spring-session-data-redis</artifactId>
        </dependency>
创建SessionConfig
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;
import org.springframework.session.data.redis.config.annotation.web.http.EnableRedisHttpSession;

//这个类用配置redis服务器的连接
//maxInactiveIntervalInSeconds为SpringSession的过期时间(单位:秒)


@Configuration @EnableRedisHttpSession(maxInactiveIntervalInSeconds = 1800) public class SessionConfig { // 冒号后的值为没有配置文件时,制动装载的默认值 @Value("${redis.hostname:localhost}") String HostName; @Value("${redis.port:6379}") int Port; @Bean public JedisConnectionFactory connectionFactory() { JedisConnectionFactory connection = new JedisConnectionFactory(); connection.setPort(Port); connection.setHostName(HostName); return connection; } }
初始化Session
public class SessionInitializer extends AbstractHttpSessionApplicationInitializer{
    public SessionInitializer() {
        super(SessionConfig.class);
    }
}
控制器层代码
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.SpringApplication;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class SessionController {

    @Value("${server.port}")
    private String PORT;

    public static void main(String[] args) {
        SpringApplication.run(SessionController.class, args);
    }

    @RequestMapping("/index")
    public String index() {
        return "index:" + PORT;
    }

   // @methodDesc: 功能描述:(往session存放值)
    
    @RequestMapping("/setSession")
    public String setSession(HttpServletRequest request, String sessionKey, String sessionValue) {
        HttpSession session = request.getSession(true);
        session.setAttribute(sessionKey, sessionValue);
        return "success,port:" + PORT;
    }

   // @methodDesc: 功能描述:(从Session获取值)
    
    @RequestMapping("/getSession")
    public String getSession(HttpServletRequest request, String sessionKey) {
        HttpSession session =null;
        try {
         session = request.getSession(false);
        } catch (Exception e) {
          e.printStackTrace();
        }
        String value=null;
        if(session!=null){
            value = (String) session.getAttribute(sessionKey);
        }
        return "sessionValue:" + value + ",port:" + PORT;
    }

}

 配置文件

#redis配置
# Redis数据库索引(默认为0)
spring.redis.database=0
# Redis服务器地址
spring.redis.host=localhost
# Redis服务器连接端口
spring.redis.port=6379
#Redis密码
spring.redis.password=redis密码
# 连接池最大连接数(使用负值表示没有限制)
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
#springboot内置tomcat的端口设置
server.port=8080

redis也可以这样配置:

@Configuration
@EnableCaching//开启缓存注解
//maxInactiveIntervalInSeconds:session的统一过期时间,默认是1800秒过期,这里测试修改为60秒
@EnableRedisHttpSession(maxInactiveIntervalInSeconds = 60)//注解,开启redis集中session管理
public class RedisConfig {
    // 以下redisTemplate自由根据场景选择
    //默认的String-String
    //    @Bean
    public RedisTemplate RedisTemplate(RedisConnectionFactory factory) {
        StringRedisTemplate stringRedisTemplate = new StringRedisTemplate();
        stringRedisTemplate.setConnectionFactory(factory);
        return stringRedisTemplate;
    }

    @Bean
    public RedisTemplate<String, Object> RedisTemplate2(RedisConnectionFactory factory) {
        RedisTemplate<String, Object> template = new RedisTemplate<String, Object>();
        template.setConnectionFactory(factory);
        template.setKeySerializer(new StringRedisSerializer());
        //GenericJackson2JsonRedisSerializer方便反序列化,redis中也方便查看json
        template.setValueSerializer(new GenericJackson2JsonRedisSerializer());
        template.setHashKeySerializer(new GenericJackson2JsonRedisSerializer());
        template.setHashValueSerializer(new GenericJackson2JsonRedisSerializer());
        template.afterPropertiesSet();
        return template;
    }
    @Bean
    public RedisTemplate<Object, Object> RedisTemplate3(RedisConnectionFactory factory) {
        RedisTemplate<Object, Object> template = new RedisTemplate<>();
        template.setConnectionFactory(factory);
        //使用Jackson2JsonRedisSerializer来序列化和反序列化redis的value值(默认使用JDK的序列化方式)
        Jackson2JsonRedisSerializer serializer = new Jackson2JsonRedisSerializer(Object.class);

        ObjectMapper mapper = new ObjectMapper();
        mapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
        mapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
        serializer.setObjectMapper(mapper);
        //使用StringRedisSerializer来序列化和反序列化redis的key值
        template.setKeySerializer(new StringRedisSerializer());
        //使用Jackson2JsonRedisSerializer来序列化和反序列化redis的value值(默认使用JDK的序列化方式)
        template.setValueSerializer(serializer);
        // 设置hash key 和value序列化模式
        template.setHashKeySerializer(new StringRedisSerializer());
        template.setHashValueSerializer(serializer);
        template.afterPropertiesSet();
        return template;
    }
    /**
     * redis作为缓存
     * @param redisTemplate
     * @return
     */
    @Bean
    public CacheManager cacheManager(RedisTemplate<String, Object>  redisTemplate) {
        RedisCacheManager rcm = new RedisCacheManager(redisTemplate);
        // 多个缓存的名称,目前只定义了一个
        rcm.setCacheNames(Arrays.asList("user"));
        //设置缓存过期时间(秒)
        rcm.setDefaultExpiration(60);
        return rcm;
    }

    /**
     * 在springboot中使用spring-session的时候,
     * 在不同的域名下面需要配置cookie主域否则session共享不生效
     * @return
     */
    @Bean
    public CookieSerializer cookieSerializer() {
        DefaultCookieSerializer defaultCookieSerializer = new DefaultCookieSerializer();
        //cookie名字
        defaultCookieSerializer.setCookieName("sessionId");
        //不同子域时设置
        //defaultCookieSerializer.setDomainName("xxx.com");
        //设置各web应用返回的cookiePath一致
        defaultCookieSerializer.setCookiePath("/");
        return defaultCookieSerializer;
    }
}

集群配置:

 spring:  
   redis:  
     cluster:  
       nodes:  
        - Centos6701:6379  
        - Centos6701:6380
        - Centos6702:6380
        - Centos6702:6379 
        - Centos6703:6379 
        - Centos6703:6380

 

高并发解决方案

业务数据库  -》 数据水平分割(分区分表分库)、读写分离

业务应用 -》 逻辑代码优化(算法优化)、公共数据缓存

应用服务器 -》 反向静态代理、配置优化、负载均衡(apache分发,多tomcat实例)

系统环境 -》 JVM调优

页面优化 -》 减少页面连接数、页面尺寸瘦身

1、动态资源和静态资源分离;

2、CDN;

3、负载均衡;

4、分布式缓存;

5、数据库读写分离或数据切分(垂直或水平);

6、服务分布式部署。

 

posted @ 2019-02-20 13:03 动手的程序员 阅读( ...) 评论( ...) 编辑 收藏
springboot整合redis,实现共享session 最近在springboot里整合redis来做缓存的时候,踩了很多坑啊,哎,前前后后折腾了两个晚上的时间。在这记录一下,以免下次又踩坑。 pom.xml: &lt;!-- redis 客户端使用jedis --&gt; &lt;dependency&gt; &lt;groupId&gt;redis.clients&lt;/groupId&gt; &lt;artifactId&gt;... 阅读详情

相关推荐

SpringBoot整合Spring Session Redis

一、问题由来 项目使用Spring Security进行请求拦截和认证授权机制时,在单一服务器部署没有异常,但在使用多台服务器负载均衡后会出现已授权失效的问题,原因在于使用Spring Security认证授权的方式依赖于SessionId,而多台服务器没有共享Session,导致请求转发到其他的负载均衡服务器后认证失效。 因此,为了解决多台服务器之间的Session共享问题,将使用redis存储Session而达到Session一致性的目的。 二、框架整合 SpringBoot提供了Spring Se

qq_21998021的博客 858

SpringBoot 使用Redis存储Session

Session(会话)是一种在客户端与服务器之间维持状态的机制。它允许服务器在多个请求之间存储用户的数据,以便用户可以在访问网站或应用时维持某种程度的连续性和个性化体验。以下是对 session 的详细解释:-会话的定义: 会话指的是用户与服务器之间的一系列互动。通常从用户登录开始,到用户退出或会话过期结束。-目的: 主要用于在用户的多个请求之间保持状态。这对于存储用户登录状态(十天免登录)、购物车内容、用户设置等非常重要。

weixin_63389617的博客 2210

第 5-11 课:Spring Boot 整合 Redis 实现 Session 共享

前言 上节课我们学习了如何使用 Spring Boot 整合 Redis,在实际开发中 Redis 有一个非常重要的应用就是使用它来完成 Session 共享。Session 是由 Servlet 创建并管理的,将数据保存在服务端内存中,所谓的 Session 共享并不是单体应用的范畴,如果需要实现负载均衡,为项目搭建服务端集群,那么此时就需要考虑 Session 共享的问题了,为什么呢? 因为在...

ningnan9801的博客 223

SpringBoot项目使用Spring Session,将Session保存在Redis中。

我们之前实现Java的会话管理功能,主要是使用Cookie或Session。 Cookie是客户端技术,服务器把数据以cookie的形式保存在用户的浏览器中 Session是服务器端技术,服务器把数据以session的形式保存在服务器中 在分布式情况下,session会失效,比如项目部署在多台服务器中,服务器之间无法共享session,用户在A服务器上已经登录了,但当负载均衡跳转到服务器B时,由于B服务器并没有用户的登录信息,session就失效了,用户就退出了登录。 一旦服务器关闭或重启也

qq_42804736的博客 8589

SpringBoot整合Shiro与Redis的缓存与Session共享实践案例

SpringBoot是一种广泛使用的Java开发框架,其目的是为了简化Spring应用的初始搭建以及开发过程。通过约定优于配置的原则,SpringBoot为开发者提供了一种快速构建项目的捷径,特别是对于那些刚刚踏入IT行业的新手而言,它能够帮助他们快速上手,高效完成项目开发。SpringBoot的核心优势在于自动配置、独立运行、内嵌服务器、无代码生成和无需配置XML。在SpringBoot环境中集成Shiro,通常可以利用SpringBoot的自动配置功能来简化Shiro的集成。

weixin_42466723的博客 1072

FAST-LIO2实战:从零搭建香港大学火星实验室SLAM框架(附官方数据集测试指南)

本文提供了一份详细的FAST-LIO2实战指南,帮助读者从零开始搭建香港大学火星实验室开源的这一高效激光惯性里程计框架。内容涵盖系统环境配置、依赖安装、源码编译、官方数据集测试以及参数调优,旨在让开发者快速上手并应用于机器人SLAM项目。

ppp33的博客 689

Spring Boot Redis 存储 Session

Spring Boot Redis 存储 Session 第一步,编写pom.xml <!-- redis --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> <!-- red.

574

力软敏捷开发框架源码7.0.6旗舰版 JNPF开发平台3.4.5 企业版 旗舰版

JNPF作为作为一款深受用户喜爱的低代码产品,凭借雄厚的科研技术力量、丰富的软件开发项目经验、严谨的项目开发流程和高质量的售后服务,已成功帮助千家企业完成数字化项目,建立了覆盖不同行业客户和不同发展阶段的软件产品服务体系。

huoooos0的博客 1841

使用Redis存储Spring Boot项目中的Session

在开发Spring Boot项目时,我们通常会遇到如何高效管理Session的问题。默认情况下,Spring Boot会将Session存储在内存中。但在分布式系统中,这种方式显然不太合适。今天,我们将学习如何将Session存储从内存切换到Redis,并验证配置是否成功。

GP的空间 1040

Simscape Multiboby学习笔记1——跟着官网学Multibody

文章目录一. 引言二. Simscape Multibody自学之路三. 本教程的目录 一. 引言 最近在倒腾Matlab的动力学仿真,起因是看到有人推荐Matlab的multbody模块,一经了解之下简直惊为天人。作为一名Matlab的小粉,看到这么好用的模块简直不要太开心,之前用simulink搭飞行器的仿真模型,虽然能够仿真看到六自由度位移,毕竟不能可视化,还是很不够直观,而且simulink仿真(以及更费力的脚本文件仿真)需要精确建模,模型不精确计算也是天差地别。而Multibody在具备其他动力学

qq_30267617的博客 8241

ROS2_IGH方案配置(二)——Ubuntu22.04 实时内核性能验证与调优

本文详细介绍了在Ubuntu22.04系统上配置ROS2_IGH方案时,如何验证和调优PREEMPT_RT实时内核性能。通过使用cyclictest工具进行基准测试和压力测试,分析中断与硬件延迟,并优化内核参数,确保系统满足工业控制领域对硬实时性的苛刻要求。文章还提供了针对ROS2的特殊优化建议和性能监控方案,帮助开发者实现毫秒级延迟的稳定控制。

weixin_30791095的博客 224

Spring 框架下 Redis 会话存储应用实践

本文介绍了使用Redis作为Spring Boot应用会话存储的解决方案。文章首先分析了传统服务器内存会话的局限性,包括单机限制、内存压力和分布式一致性问题。接着阐述了Redis作为会话存储的优势,如高性能内存访问、分布式支持和自动过期机制。通过Spring Boot集成示例,详细说明了配置步骤和会话操作方法,并提供了高并发优化策略,如连接池调优和本地缓存结合Redis。最后以购物车案例展示了Redis会话存储的实际应用,并总结了Redis会话存储在分布式共享、高并发支持和安全性方面的优势。

深耕后端、偏爱架构,用代码与设计构建可靠系统 742

ubuntu18.04美化主题(完整版)

和网上的美化一样,但是我当初跟着博客美化的时候遇到一些问题,按博客的做法无法解决。 所以我自己也写一篇关于ubuntu18.04美化主题的博客。 第一步:安装主题工具:GNOME Tweaks sudo apt-get update sudo apt-get install gnome-tweak-tool 然后安装完成后我们打开Tweaks(截图如下): 第二步,修改窗口按钮位...

B丶atty的博客 7万+

redis session java获取attribute_springboot整合redis实现分布式session

分布式 session分布式系统中,登录的 session 信息一般都是存放在 redis 中的。本文记录一下 spring-boot 整合 redis 实现分布式 session 登录验证。快速开始准备工作本地启动 redis 服务[21496]15Sep09:24:37.508#oO0OoO0OoO0OoRedisisstartingoO0OoO0OoO0Oo[21496]...

weixin_39725365的博客 320

详解vit_base_patch16_224

ViT-Base模型的核心思想是将输入图像划分为多个小块(patches),并使用Transformer架构来处理这些小块。具体来说,ViT-Base使用16x16像素的patch大小,输入图像的尺寸为224x224像素,这意味着每张图像将被划分为49个patch(22416×22416=14×14=19616224​×16224​=14×14=196个patch)。ViT-Base(ViT-B/16)通过将图像处理任务转化为序列处理任务。

具身机器人和通用AI 3230

万字长文,小白新手怎么开始做YOLO实验,从零开始教!整体思路在这里,科研指南针!

万字长文,小白新手怎么开始做YOLO实验,从零开始教!整体思路在这里,科研指南针!

Coding... 1万+

springboot集成redis实现session共享的过程、问题和心得

Redis的安装:https://blog.youkuaiyun.com/weixin_45412021/article/details/97134995 Springboot集成redis session 1、pom中引入redis相关依赖 <!-- 配置使用redis启动器 --> <dependency> <groupId>or...

weixin_45412021的博客 430

ESP-SPARKBOT AI 智能机器人:v1.2 全流程复刻指南

本文介绍 ESP-SPARKBOT AI 智能机器人 v1.2 版本的全流程复刻,包含 PCB 、3D 打印、固件烧录、常见问题解决、参考资料等

举世誉之而不加劝,举世非之而不加沮,定乎内外之分,辩乎荣辱之境,斯已矣。 9258

SpringBoot2.1.4快速整合session-redis实现分布式session共享,极少配置

SpringBoot2.1.4与redis、springsession集成redis集成spring-session-Redis开箱即用的便利 集成redis 1.引入jar包 <!-- redis --> <dependency> <groupId>org.springframework.boot</groupId> <art...

日常打卡每日一Bug的博客 9915

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

【SpringBoot框架篇】19.集成spring-session利用redis来实现session共享

集成spring-session利用redis来实现session共享

皓亮君的博客 3601

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

springboot整合redis处理session共享

Spring Boot + Redis 处理 Session 共享 参考网址: https://mp.weixin.qq.com/s?__biz=MzAwMjk5Mjk3Mw==&mid=2247493417&idx=3&sn=3d5966aa32b1947f5287e2a611aec665&chksm=9ac3590badb4d01d1a7693ae52bfd752a4f9a72ff927424a5cd5a9247e87d857f0a46f7d6040&mpsha

java技术博客 906

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

springboot 整合 session,实现 session 共享

前言 session 和 cookie 是保存用户状态的两种方式,session在服务端,cookie 在客户端。 本文章将记录 springboot 整合 session 的 demo 示例。 session(会话) 粘性会话 如果某台服务器宕机,那么会话信息就没有了。 复制会话 每台机器都复制会话,如果量太大的话,不现实 集中会话 使用 mongo 、redis 等统一保持会话 pom 依...

wjavadog的博客 3万+

在SpringBoot项目中整合SpringSession,基于Redis实现对Session的管理和事件监听

SpringSession是基于Spring框架的Session管理解决方案。它基于标准的Servlet容器API,提供了Session的分布式管理解决方案,支持把Session存储在多种场景下,比如内存、MongoDB、Redis等,并且能够快速集成到Spring应用程序中。使用SpringSession实现Session管理,可以有效解决Session共享的问题,提升系统的可伸缩性和可靠性。

向心行者 4398

SpringBoot整合Redis实现Shiro分布式Session共享

前言: 我们知道shiro有一套自身的session管理机制,默认的session是存储在运行jvm内存中的,在单应用服务器中可共享session,但系统若为分布式架构,则不同应用服务器之间无法共享session,要实现不同应用服务器之间共享session,则需要重写SessionManager中的SessionDao,把session存储在缓存中,这里我们采用redis来存储,引用shiro-...

王绍桦 1万+

SpringBoot整合Redis(作为Cache缓存)+Lua,Redis实现Session共享

lua

usa_washington的博客 1193
上一篇: freemarker常用标签解释遍历
下一篇: springboot整合xxl-mq学习笔记
菩提树下的丁春秋
博客等级 码龄8年 18粉丝 336原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值