Spring Boot项目利用Redis实现session管理实例

发布时间 - 2026-01-11 01:50:03    点击率:

在现代网络服务中,session(会话)不得不说是非常重要也是一定要实现的概念,因此在web后台开发中,对session的管理和维护是必须要实现的组件。这篇文章主要是介绍如何在Spring Boot项目中加入redis来实现对session的存储与管理。

1. 利用Spring Initializr来新建一个spring boot项目

2. 在pom.xml中添加redis和session的相关依赖。项目生成的时候虽然也会自动生成父依赖,但是1.5.3版本的spring boot的redis相关依赖有可能不能够正常工作,笔者自行在maven repository找到了比较稳定的版本如下方代码所示

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-web</artifactId>
</dependency>

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-data-redis</artifactId>
  <version>1.5.2.RELEASE</version>
</dependency>

<dependency>
  <groupId>org.springframework.session</groupId>
  <artifactId>spring-session-data-redis</artifactId>
  <version>1.3.0.RELEASE</version>
</dependency>

3. 在application.properties中添加redis数据库的相关配置。这里为了演示使用方法只添加了相对简单的配置,即设置了session存储的数据库类型、使用的数据库号、数据库地址和端口号。实战中还会对使用非默认数据库、数据库大小、数据库最大连接数、生存时长、是否写回磁盘等许多参数进行配置

# Redis配置
spring.session.store-type=redis
spring.redis.database=0
spring.redis.host=localhost
spring.redis.port=6379

4. 编写一个测试的controller来验证是否能够正确地读写session。这里的controller中,我判断了当前获取的session是否是新生成的。如果是,则输出成功创建一个session对象,并返回session的id,然后在session中添加一个字段。如果session不是新生成的,即是已经存在的session,则输出session是已经存在的并返回session的id,然后再输出session中初次创建session保存的key所对应的value

@SpringBootApplication
@EnableRedisHttpSession
@RestController
public class DemoApplication {

  private Logger logger = LoggerFactory.getLogger(this.getClass());

  public static void main(String[] args) {
    SpringApplication app = new SpringApplication(DemoApplication.class);
    app.setWebEnvironment(true);
    app.run(args);
  }

  @GetMapping("/hello")
  public ResponseEntity<?> hello(HttpSession session) {
    if (session.isNew()) {
      logger.info("Successfully creates a session ,the id of session :" + session.getId());
      session.setAttribute("key", "hello");
    } else {
      logger.info("session already exists in the server, the id of session :"+ session.getId());
      logger.info(session.getAttribute("key").toString());
    }
    return new ResponseEntity<>("Hello World", HttpStatus.OK);
  }

}

5. 测试代码

首先运行Redis客户端

redis-cli

查看当前数据库内容

127.0.0.1:6379> keys * 
(empty list or set)

运行spring boot项目

第一次浏览器访问localhost:8080/hello,如下图所示则成功运行

查看log可以看到

2017-06-12 00:26:12.601 INFO 9580 — [nio-8080-exec-1] 
ication$$EnhancerBySpringCGLIB$$de942542 : Successfully creates a session ,the id of session :4368a535-9bfa-406b-975c-e58c2bca1e75

再次访问localhost:8080/hello时,查看log可以看到能够正确地从redis中取出存放在session中的某个key对应的值

2017-06-12 00:30:43.533 INFO 9580 — [nio-8080-exec-5] 
ication$$EnhancerBySpringCGLIB$$de942542 : session already exists in the server, the id of session :4368a535-9bfa-406b-975c-e58c2bca1e75 
2017-06-12 00:30:43.533 INFO 9580 — [nio-8080-exec-5] 
ication$$EnhancerBySpringCGLIB$$de942542 : hello

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# Spring  # Boot  # Redis  # session  # Redis实现session  # SpringBoot+Shiro学习之密码加密和登录失败次数限制示例  # spring boot 1.5.4 集成shiro+cas  # 实现单点登录和权限控制  # Spring shiro + bootstrap + jquery.validate 实现登录、注册  # spring boot实战教程之shiro session过期时间详解  # SpringBoot整合Shiro的代码详解  # 详解Spring Boot 集成Shiro和CAS  # 详解Spring-Boot集成Spring session并存入redis  # 详解SpringBoot中Session超时原理说明  # spring boot与redis 实现session共享教程  # Spring Boot集成Shiro并利用MongoDB做Session存储的方法详解  # 可以看到  # 所示  # 正确地  # 放在  # 也会  # 有可能  # 会对  # 然后再  # 这篇文章  # 即是  # 来实现  # 不能够  # 创建一个  # 自动生成  # 时长  # 大家多多  # 如下图  # 是否能够  # 新建一个  # 主要是 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel如何使用Service Provider注册服务_Laravel服务提供者配置与加载  Laravel如何实现登录错误次数限制_Laravel自带LoginThrottles限流配置【方法】  EditPlus中的正则表达式实战(5)  如何在云主机上快速搭建网站?  如何快速搭建二级域名独立网站?  软银砸40亿美元收购DigitalBridge 强化AI资料中心布局  Laravel怎么配置不同环境的数据库_Laravel本地测试与生产环境动态切换【方法】  如何快速建站并高效导出源代码?  javascript读取文本节点方法小结  ChatGPT回答中断怎么办 引导AI继续输出完整内容的方法  如何用ChatGPT准备面试 模拟面试问答与职场话术练习教程  详解jQuery中的事件  使用C语言编写圣诞表白程序  Laravel Eloquent模型如何创建_Laravel ORM基础之Model创建与使用教程  用v-html解决Vue.js渲染中html标签不被解析的问题  如何在IIS中新建站点并配置端口与物理路径?  Laravel Sail是什么_基于Docker的Laravel本地开发环境Sail入门  Laravel如何使用withoutEvents方法临时禁用模型事件  如何破解联通资金短缺导致的基站建设难题?  Win11任务栏卡死怎么办 Windows11任务栏无反应解决方法【教程】  Android Socket接口实现即时通讯实例代码  使用spring连接及操作mongodb3.0实例  Laravel怎么清理缓存_Laravel optimize clear命令详解  音响网站制作视频教程,隆霸音响官方网站?  最好的网站制作公司,网购哪个网站口碑最好,推荐几个?谢谢?  百度输入法ai面板怎么关 百度输入法ai面板隐藏技巧  如何用y主机助手快速搭建网站?  Win11关机界面怎么改_Win11自定义关机画面设置【工具】  js实现点击每个li节点,都弹出其文本值及修改  Linux安全能力提升路径_长期防护思维说明【指导】  Java Adapter 适配器模式(类适配器,对象适配器)优缺点对比  高防服务器租用如何选择配置与防御等级?  laravel怎么在请求结束后执行任务(Terminable Middleware)_laravel Terminable Middleware请求结束任务执行方法  Laravel的Blade指令怎么自定义_创建你自己的Laravel Blade Directives  INTERNET浏览器怎样恢复关闭标签页_INTERNET浏览器标签恢复快捷键与方法【指南】  JavaScript如何实现音频处理_Web Audio API如何工作?  公司网站制作需要多少钱,找人做公司网站需要多少钱?  Laravel怎么使用artisan命令缓存配置和视图  购物网站制作费用多少,开办网上购物网站,需要办理哪些手续?  如何在HTML表单中获取用户输入并结合JavaScript动态控制复利计算循环  如何基于云服务器快速搭建网站及云盘系统?  Laravel Debugbar怎么安装_Laravel调试工具栏配置指南  百度浏览器ai对话怎么关 百度浏览器ai聊天窗口隐藏  如何在Tomcat中配置并部署网站项目?  如何自己制作一个网站链接,如何制作一个企业网站,建设网站的基本步骤有哪些?  Laravel storage目录权限问题_Laravel文件写入权限设置  ,怎么在广州志愿者网站注册?  Laravel怎么实现前端Toast弹窗提示_Laravel Session闪存数据Flash传递给前端【方法】  详解jQuery中基本的动画方法  Angular 表单中正确绑定输入值以确保提交与验证正常工作