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

 更新时间:2018年08月20日 15:16:34   作者:别等时光染了梦想  
Redis是运行在内存中,查取速度很快。本文重点给大家介绍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共享,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

相关文章

  • Java 线程池全面总结与详解

    Java 线程池全面总结与详解

    在一个应用程序中,我们需要多次使用线程,也就意味着,我们需要多次创建并销毁线程。而创建并销毁线程的过程势必会消耗内存。而在Java中,内存资源是及其宝贵的,所以,我们就提出了线程池的概念
    2021-10-10
  • JavaSE的三大接口:Comparator,Comparable和Cloneable详解

    JavaSE的三大接口:Comparator,Comparable和Cloneable详解

    这篇文章主要介绍了详解JavaSE中Comparator,Comparable和Cloneable接口的区别的相关资料,希望通过本文大家能彻底掌握这部分内容,需要的朋友可以参考下
    2021-10-10
  • springboot整合mongodb使用详解

    springboot整合mongodb使用详解

    MongoDB是一个文档数据库(以 JSON 为数据模型),由C++语言编写,旨在为WEB应用提供可扩展的高性能数据存储解决方案,本文就给大家介绍一下详细介绍一下springboot整合mongodb使用,需要的朋友可以参考下
    2023-07-07
  • idea中的Maven导包失败问题解决方案汇总

    idea中的Maven导包失败问题解决方案汇总

    这篇文章主要介绍了idea中的Maven导包失败问题解决总结,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-02-02
  • mybatis中insert主键ID获取和多参数传递的示例代码

    mybatis中insert主键ID获取和多参数传递的示例代码

    这篇文章主要介绍了mybatis中insert主键ID获取和多参数传递的示例代码,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-03-03
  • 解决Mybatis-plus找不到对应表及默认表名命名规则的问题

    解决Mybatis-plus找不到对应表及默认表名命名规则的问题

    这篇文章主要介绍了解决Mybatis-plus找不到对应表及默认表名命名规则的问题,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-11-11
  • spring schedule实现动态配置执行时间

    spring schedule实现动态配置执行时间

    这篇文章主要介绍了spring schedule实现动态配置执行时间,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-11-11
  • Java 使用反射调用jar包中的类方式

    Java 使用反射调用jar包中的类方式

    这篇文章主要介绍了Java 使用反射调用jar包中的类方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-04-04
  • 简单介绍线性表以及如何实现双链表

    简单介绍线性表以及如何实现双链表

    本文先介绍线性表的几个基本组成部分:数组、单向链表、双向链表;随后给出双向链表的C、C++和Java三种语言的实现,需要的朋友可以参考下
    2015-07-07
  • Java 异常java.lang.NoSuchFieldException解决方案

    Java 异常java.lang.NoSuchFieldException解决方案

    这篇文章主要介绍了Java 异常java.lang.NoSuchFieldException解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-10-10

最新评论