2021-11-11Springboot实现分布式session

Springboot集成redis实现分布式session

步骤

1。导入相关依赖,配置yml

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.session</groupId>
            <artifactId>spring-session-core</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.session</groupId>
            <artifactId>spring-session-data-redis</artifactId>
        </dependency>
  redis:
    host: localhost
    port: 6379
    jedis.pool.max-idle: 100
    jedis.pool.max-wait: -1ms
    jedis.pool.min-idle: 2
    timeout: 2000m

2.启动类上加入注解
@EnableRedisHttpSession

import org.springframework.session.data.redis.config.annotation.web.http.EnableRedisHttpSession;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
import tk.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;

import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
@MapperScan("com.fzw.dao")
@EnableSwagger2
@EnableRedisHttpSession
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class,args);}
}

3.在controller的方法上传入HttpServletRequest对象,例如本例中希望实现第一次登录是从数据库中查询数据,但是后面再次访问时,从redis缓存中获取数据,这样减少数据库的压力

@ApiOperation(value = "登录 ",notes = "登录 ")
@PostMapping("/login")
public Result login(@RequestBody BookUser bookUser, HttpServletRequest request) {
    List<BookUser> list=bookUserService.select(bookUser);
    if(list.size()>0){
        if(request.getAttribute("flag")==null){ //第一次登录
            request.getSession().setAttribute("flag","true");
            System.out.println(request.getSession().getAttribute("flag"));
        }
        return new Result(true,200,"登录成功");
    }else{

        return new Result(true,500,"用户名或密码错误");
    }
}
}

service层

  public PageInfo<Book> findAllByPage(Integer currentPage, Integer pageSize, HttpServletRequest request) {
       PageHelper.startPage(currentPage, pageSize);
       PageInfo<Book> pageInfo = new PageInfo<>();
       Object flag = request.getSession().getAttribute("flag");
       System.out.println(request.getSession().getAttribute("flag"));
       if (flag==null|| "true".equals(flag)) {  //第一次 登录
           // 通过数据库查询
           List<Book> bookList = bookMapper.selectAll();
           pageInfo = new PageInfo(bookList);
           System.out.println("走数据库");
           request.getSession().setAttribute("booklist", bookList);
           request.getSession().setAttribute("flag", "false");
       } else {
           //通过 redis查询
           // 封装PageInfo 对象
           pageInfo = new PageInfo((List) request.getSession().getAttribute("booklist"));
           System.out.println("走redis");
       }
       System.out.println("pageInfo的 值" + pageInfo);
       return pageInfo;
   }

在访问到该地址后,redis会自动创建redis对象
在这里插入图片描述
同时启动多个Springboot应用测试

在这里插入图片描述
在这里插入图片描述
本例中通过nginx实现负载均衡,nginx配置如下
nginx.conf
在这里插入图片描述

代码还是有些问题的,欢迎大家评论交流。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值