首頁  >  文章  >  資料庫  >  如何使用Spring boot基於Redis快速搭建分散式Session緩存

如何使用Spring boot基於Redis快速搭建分散式Session緩存

WBOY
WBOY轉載
2023-05-27 20:49:27930瀏覽

使用Spring boot基於Redis快速搭建分散式Session快取方案

大型web應用中,session的管理非常重要,這是單機儲存滿足不了的.

通常有以下幾種方法:

  1. 將session持久化到資料庫中. 但缺點是讀寫成本太高.

  2. 去session化,例如將資訊儲存到cookie中. 但缺點是大小有限制,且不安全.

3 . 將session儲存到一個分散式的nosql資料庫中,例如Redis.

#第一步:建置Spring Boot開發環境

新增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 ######

第二步:開啟@EnableRedisHttpSession 註解

@Configuration
@EnableRedisHttpSession(redisNamespace = "mysession",maxInactiveIntervalInSeconds = 60*60*24)
public class SessionConfig

#@EnableRedisHttpSession註解的原始碼如下,可以看到可以配置三個參數:

  • # #maxInactiveIntervalInSeconds :session中的資料的過期時間(不是session在redis中的過期時間)
  • 在我的配置中,我指定了一個名為"mysession"的命名空間,用於標識當前應用程式

  • 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## #

以上是如何使用Spring boot基於Redis快速搭建分散式Session緩存的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:yisu.com。如有侵權,請聯絡admin@php.cn刪除