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

作者:别等时光染了梦想 时间:2022-07-14 06:33:19 

在微服务中,需要我们在各个微服务中共享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共享网站的支持!

来源:https://blog.csdn.net/wangxueqing52/article/details/81871389

标签:spring,cloud,redis
0
投稿

猜你喜欢

  • 详解Android中点击事件的几种实现方式

    2022-07-03 09:05:09
  • Java list如何根据id获取子节点

    2023-09-04 09:42:37
  • Java虚拟机内存分配与回收策略问题精细解读

    2021-08-12 18:54:51
  • 解决java读取EXCEL数据变成科学计数法的问题

    2023-06-14 02:17:56
  • 解析c#操作excel后关闭excel.exe的方法

    2021-08-14 16:55:22
  • Java详解表格的创建与使用流程

    2021-06-19 22:58:52
  • java匿名内部类实例简析

    2022-12-26 21:25:15
  • Spring如何消除代码中的if-else/switch-case

    2021-12-12 03:04:47
  • Java中的守护线程问题

    2023-09-13 11:49:23
  • Winform项目中使用FastReport.Net报表控件

    2022-01-16 11:08:27
  • Android使用gallery和imageSwitch制作可左右循环滑动的图片浏览器

    2021-08-31 22:49:45
  • Springboot 使用maven release插件执行版本管理及打包操作

    2023-07-12 01:20:35
  • C#删除文件目录或文件的解决方法

    2022-12-13 09:25:03
  • Flutter实现矩形取色器的封装

    2023-06-19 04:08:47
  • android实现QQ微信侧滑删除效果

    2021-07-11 15:58:11
  • java byte数组与int,long,short,byte的转换实现方法

    2023-09-08 12:26:43
  • 使用springboot打包成zip部署,并实现优雅停机

    2021-08-04 20:45:01
  • Mybatis通过数据库表自动生成实体类和xml映射文件

    2022-01-11 07:05:46
  • java中 ${} 和 #{} 有什么区别

    2023-11-29 01:34:32
  • 微信公众号服务号推送模板消息设置方法(后端java)

    2023-11-20 08:27:58
  • asp之家 软件编程 m.aspxhome.com