跳转到主内容
趣航编程网 - 趣学编程,启航技术之路!

如何使用Spring boot基于Redis快速搭建分布式Session缓存

使用Spring boot基于Redis快速搭建分布式Session缓存方案 大型web应用中, session 的管理非常重要,这是单机存储满足不了的. 通常有以下几种方法: 将session持久化到数据库中. 但缺点是读写成本太高. 去session化,比如将信息存储到cookie中. 但缺点是大小有限制,并且不安全. 3 . 将session存储到一个分布式的nosql数据库中,比如 Redis. 第一步:搭建Spring Boot开发环境 添加maven核心依赖 spring-session-data- redis
org.springframework.session spring-session-data-redis
在application.properties文件中配置redis连接属性
###### Redis config start ###### spring.redis.database=0 spring.redis.host=192.168.41.60 spring.redis.port=6379 spring.redis.password= spring.redis.pool.max-active=20 spring.redis.pool.max-wait=-1 spring.redis.pool.max-idle=8 spring.redis.pool.min-idle=0 spring.redis.timeout=0 ###### Redis config end ######
第二步:开启 @EnableRedisHttpSession 注解
@Configuration @EnableRedisHttpSession(redisNamespace = "mysession",maxInactiveIntervalInSeconds = 60*60*24) public class SessionConfig
@EnableRedisHttpSession注解的源码如下,可以看到可以配置三个参数: maxInactiveIntervalInSeconds :session中的数据的过期时间(不是session在redis中的过期时间) 在我的配置中,我指定了一个名为"mysession"的命名空间,用于标识当前应用程序 Redis 8.2.3 Redis 8.2.3 是一款安全优先的高性能键值存储系统。该版本紧急修复了可能引发远程代码执行(RCE)的高危漏洞(CVE-2025-62507),并解决了 HyperLogLog 及 Cuckoo Filter 等数据结构在特定场景下的崩溃问题。建议所有用户立即升级,以保障生产环境的系统稳定与数据安全。 下载 redisFlushMode :redis保存session的方式,默认 ON_SAVE 有两种方式: IMMEDIATE :一旦创建session的时候就立即保存. ON_SAVE :创建session的时候不会保存,但当往session中添加数据的时候就会保存
@Retention(java.lang.annotation.RetentionPolicy.RUNTIME) @Target({ java.lang.annotation.ElementType.TYPE }) @Documented @Import(RedisHttpSessionConfiguration.class) @Configuration public @interface EnableRedisHttpSession int maxInactiveIntervalInSeconds() default 1800; String redisNamespace() default ""; RedisFlushMode redisFlushMode() default
第三步:测试 编写一个controller
@RestController public class HelloController @RequestMapping("/hello/{username}") public String hello(HttpSession session, @PathVariable(value = "username") String username) { session.setAttribute("username", username); return "保存session到Redis成功"; } @RequestMapping("/getName") public String getUsername(HttpSession session) { String username = (String) session.getAttribute("username"); return
当浏览器访问 http://localhost:8080/hello/admin 这个链接, hello方法会接受到 浏览器传过来的参数,并保存在session中,然后再把session保存到Redis中 通过查看redis中的信息可看到如下信息: 其中 spring:session 是自动添加的,我们创建的命名空间 mysession 在这个默认的目录下面 接下来我们再访问 http://localhost:8080/getName ,便可以看到浏览器会显示 刚才我们保存再session中的 admin

相关文章