当前位置: 首页 > 编程笔记 >

SpringCloud实现Redis在各个微服务的Session共享问题

勾学博
2023-03-14
本文向大家介绍SpringCloud实现Redis在各个微服务的Session共享问题,包括了SpringCloud实现Redis在各个微服务的Session共享问题的使用技巧和注意事项,需要的朋友参考一下

在微服务中,需要我们在各个微服务中共享Session,使用Redis来共享Session是一个很好的解决方法,Redis是运行在内存中,查取速度很快。

1.pom文件中添加依赖

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

2.使用Redis的session替换Spring的session

package com.xueqing.demo.sleuthserverhi;
import org.springframework.context.annotation.Configuration;
import org.springframework.session.data.redis.config.annotation.web.http.EnableRedisHttpSession;
/**
 * 添加redis配置类启用redis代码spring默认session
 */
@Configuration
@EnableRedisHttpSession
public class RedisSessionConfig {
}

3.application.properties配置文件中添加redis配置

spring.redis.port= 6379
spring.redis.host=localhost

4.启动两个端口以一样的tomcat测试

package com.xueqing.demo.sleuthserverhi;

import java.util.logging.Level;
import java.util.logging.Logger;
import brave.sampler.Sampler;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;
import javax.servlet.http.HttpServletRequest;
@SpringBootApplication
@RestController
public class SleuthServerHiApplication {
  public static void main(String[] args) {
    SpringApplication.run(SleuthServerHiApplication.class, args);
  }
  private static final Logger LOG = Logger.getLogger(SleuthServerHiApplication.class.getName());
  @Autowired
  private RestTemplate restTemplate;
  @Bean
  @LoadBalanced
  public RestTemplate getRestTemplate(){
    return new RestTemplate();
  }
  @RequestMapping("/hi")
  public String callHome(HttpServletRequest request){
    LOG.log(Level.INFO, "calling trace service-hi ");
    request.getSession().setAttribute("hi","111");
    LOG.log(Level.WARNING, "加入成功");
    return restTemplate.getForObject("http://localhost:8989/miya", String.class);
  }
  @RequestMapping("/info")
  public String info(HttpServletRequest request){
    LOG.log(Level.INFO, request.getSession().getAttribute("miya")+"");
    LOG.log(Level.WARNING, "获取成功");
    return "i'm service-hi";
  }
  @Bean
  public Sampler defaultSampler() {
    return Sampler.ALWAYS_SAMPLE;
  }
}
package com.xueqing.demo.sleuthservermiya;
import brave.sampler.Sampler;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;
import javax.servlet.http.HttpServletRequest;
import java.util.logging.Level;
import java.util.logging.Logger;
@SpringBootApplication
@RestController
public class SleuthServerMiyaApplication {
  public static void main(String[] args) {
    SpringApplication.run(SleuthServerMiyaApplication.class, args);
  }
  private static final Logger LOG = Logger.getLogger(SleuthServerMiyaApplication.class.getName());
  @RequestMapping("/hi")
  public String home(HttpServletRequest request){
    LOG.log(Level.INFO, "hi is being called");
    request.getSession().setAttribute("miya","111");
    LOG.log(Level.WARNING, "加入成功");
    return "hi i'm miya!";
  }
  @RequestMapping("/miya")
  public String info(HttpServletRequest request){
    LOG.log(Level.INFO, "info is being called");
    LOG.log(Level.INFO, request.getSession().getAttribute("hi")+"");
    LOG.log(Level.WARNING, "获取成功");
    return restTemplate.getForObject("http://localhost:8988/info",String.class);
  }
  @Autowired
  private RestTemplate restTemplate;
  @Bean
  @LoadBalanced
  public RestTemplate getRestTemplate(){
    return new RestTemplate();
  }
  @Bean
  public Sampler defaultSampler() {
    return Sampler.ALWAYS_SAMPLE;
  }
}

5.注意事项:我用的springCloud版本为F版本需要Redis版本为2.8以上 如果不是2.8以上请升级,地址如下                                    

https://github.com/MicrosoftArchive/redis/releases

总结

以上所述是小编给大家介绍的SpringCloud实现Redis在各个微服务的Session共享,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对小牛知识库网站的支持!

 类似资料:
  • 本文向大家介绍微服务中如何实现 session 共享 ?相关面试题,主要包含被问及微服务中如何实现 session 共享 ?时的应答技巧和注意事项,需要的朋友参考一下 在微服务中,一个完整的项目被拆分成多个不相同的独立的服务,各个服务独立部署在不同的服务器上,各自的 session 被从物理空间上隔离开了,但是经常,我们需要在不同微服务之间共享 session ,常见的方案就是 Spring Se

  • 本文向大家介绍Springboot实现多服务器session共享,包括了Springboot实现多服务器session共享的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了springboot实现多服务器session共享的具体代码,供大家参考,具体内容如下 环境: springboot:2.0.4 redis:3.2.100 jdk:1.8 eclipse:4.9.0 1.原理 正常

  • 本文向大家介绍学习Spring-Session+Redis实现session共享的方法,包括了学习Spring-Session+Redis实现session共享的方法的使用技巧和注意事项,需要的朋友参考一下 1、添加依赖 2、配置 spring-mvc.xml: web.xml添加拦截器: 3、使用spring-session 只要使用标准的servlet api调用session,在底层就会通过

  • 本文向大家介绍nginx+tomcat实现负载均衡,使用redis session共享,包括了nginx+tomcat实现负载均衡,使用redis session共享的使用技巧和注意事项,需要的朋友参考一下 环境准备 1、准备一台nginx服务器 ip192.168.1.133 端口81 安装过程: 准备一台tomcat服务器,先准备java环境,安装jdk步骤省略 然后分别安装3个tomcat

  • 我试图理解微服务。我想知道如何解决微服务架构中的一对多/多对多关系问题,以及最佳实践是什么。假设我想将学生课程应用程序转换为学生服务,将课程服务和学生服务对话转换为同一数据库中的学生表和课程服务对话课程表。 示例:学生可以注册许多课程,而且许多课程可以有许多学生(多对多关系)。我有2个微服务1:学生服务2:课程服务 学生服务有学生对象 课程服务具有课程对象 我知道学生服务部必须致电课程服务部才能获

  • 本文向大家介绍Spring Boot高级教程之使用Redis实现session共享,包括了Spring Boot高级教程之使用Redis实现session共享的使用技巧和注意事项,需要的朋友参考一下 Redis是一个缓存消息中间件及具有丰富特性的键值存储系统。Spring Boot为Jedis客户端库和由Spring Data Redis提供的基于Jedis客户端的抽象提供自动配置。spring-

  • 当前体系结构: 问题: 我们在前端和后端层之间有一个两步流程。 null 微服务2(MS2)需要验证I1的完整性,因为它来自前端。如何避免对MS1进行新的查询?最好的办法是什么? 我试图优化的流删除了步骤1.3和2.3 流程1: null 流程2: 2.1用户X已在本地/会话存储中存储了数据(MS2_Data) 2.2用户X在MS1上保留数据(MS2_Data+MS1_Data) 2.3 MS1使