大型web應用中,session的管理非常重要,這是單機儲存滿足不了的.
通常有以下幾種方法:
將session持久化到資料庫中. 但缺點是讀寫成本太高.
去session化,例如將資訊儲存到cookie中. 但缺點是大小有限制,且不安全.
3 . 將session儲存到一個分散式的nosql資料庫中,例如Redis.
新增maven核心依賴spring-session-data-redis
<!--基于redis的分布式session存储--> <dependency> <groupId>org.springframework.session</groupId> <artifactId>spring-session-data-redis</artifactId> </dependency>
在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 ######
@Configuration @EnableRedisHttpSession(redisNamespace = "mysession",maxInactiveIntervalInSeconds = 60*60*24) public class SessionConfig
#@EnableRedisHttpSession註解的原始碼如下,可以看到可以配置三個參數:
redisFlushMode :redis保存session的方式,預設ON_SAVE有兩種方式:IMMEDIATE#:一旦創建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## #以上是如何使用Spring boot基於Redis快速搭建分散式Session緩存的詳細內容。更多資訊請關注PHP中文網其他相關文章!