<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          SpringBoot中利用redis實(shí)現(xiàn)session共享

          共 15408字,需瀏覽 31分鐘

           ·

          2021-08-14 03:25

          點(diǎn)擊上方藍(lán)色字體,選擇“標(biāo)星公眾號(hào)”

          優(yōu)質(zhì)文章,第一時(shí)間送達(dá)

          雖然我的CRM系統(tǒng)現(xiàn)在還沒有使用負(fù)載均衡,沒有使用多機(jī)。但是session共享是必須要考慮的事情。各位可能都是大牛,但是保不齊有不知道的,先介紹下負(fù)載均衡和session共享方面的知識(shí):

                  由于我們的用戶越來越多,并發(fā)量越來越高,一臺(tái)機(jī)器無法應(yīng)付所有請求,獲取為了系統(tǒng)安全,一臺(tái)機(jī)器壞了,網(wǎng)站系統(tǒng)還能正常訪問,我們可以考慮用nginx做負(fù)載均衡服務(wù)器,將請求分發(fā)到不同的tomcat服務(wù)器處理(本處只介紹nginx做負(fù)載均衡tomcat做java服務(wù)器),集群框架如下圖所示:


          從圖中我們看出負(fù)載均衡后,我們的請求會(huì)分發(fā)到其中的一個(gè)tomcat中去,我們知道session是在機(jī)器的內(nèi)存中,那么由于我們的連續(xù)請求可能是在不同的機(jī)器去處理,那么很可能前一次請求的session后一次無法取得,如何解決這個(gè)問題?redis為我們提供了很好的session共享方案。

                  我們的CRM是采用spring boot 開發(fā)的,在spring boot里面可以非常方便的集成redis,通過redis實(shí)現(xiàn)session共享,下面我就給大家介紹下具體的實(shí)現(xiàn)。

          <dependencies>
              <dependency>
                  <groupId>org.springframework.boot</groupId>
                  <artifactId>spring-boot-devtools</artifactId>
                  <optional>true</optional>
              </dependency>
              <dependency>
                  <groupId>org.springframework.boot</groupId>
                  <artifactId>spring-boot-starter-data-redis</artifactId>
              </dependency>
              <dependency>
                  <groupId>redis.clients</groupId>
                  <artifactId>jedis</artifactId>
                  <version>2.8.1</version>
              </dependency>
              <dependency>
                  <groupId>org.springframework.data</groupId>
                  <artifactId>spring-data-redis</artifactId>
                  <!--<version>1.0.2.RELEASE</version>-->
              </dependency>
              <!-- https://mvnrepository.com/artifact/com.google.code.gson/gson -->
              <dependency>
                  <groupId>com.google.code.gson</groupId>
                  <artifactId>gson</artifactId>
                  <!--<version>2.8.0</version>-->
              </dependency>
              <dependency>
                  <groupId>com.google.zxing</groupId>
                  <artifactId>core</artifactId>
                  <version>3.0.0</version>
              </dependency>
              <dependency>
                  <groupId>com.google.zxing</groupId>
                  <artifactId>javase</artifactId>
                  <version>3.0.0</version>
              </dependency>
              <dependency>
                  <groupId>com.aliyun.oss</groupId>
                  <artifactId>aliyun-sdk-oss</artifactId>
                  <version>2.8.2</version>
              </dependency>
              <dependency>
                  <groupId>net.sf.json-lib</groupId>
                  <artifactId>json-lib</artifactId>
                  <version>2.4</version>
                  <classifier>jdk15</classifier>
              </dependency>
              <dependency>
                  <groupId>org.springframework.session</groupId>
                  <artifactId>spring-session-data-redis</artifactId>
                  <version>1.2.1.RELEASE</version>
              </dependency>
              <dependency>
                  <groupId>org.apache.httpcomponents</groupId>
                  <artifactId>httpclient</artifactId>
                  <version>4.4.1</version>
              </dependency>
              <dependency>
                  <groupId>org.apache.httpcomponents</groupId>
                  <artifactId>httpcore</artifactId>
                  <version>4.4.1</version>
              </dependency>
              <dependency>
                  <groupId>org.projectlombok</groupId>
                  <artifactId>lombok</artifactId>
              </dependency>
              <dependency>
                  <groupId>org.springframework.boot</groupId>
                  <artifactId>spring-boot-starter-web</artifactId>
              </dependency>
              <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
              <dependency>
                  <groupId>mysql</groupId>
                  <artifactId>mysql-connector-java</artifactId>
                  <version>5.1.39</version>
              </dependency>
              <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-thymeleaf -->
              <dependency>
                  <groupId>org.springframework.boot</groupId>
                  <artifactId>spring-boot-starter-thymeleaf</artifactId>
                  <version>1.4.0.RELEASE</version>
              </dependency>
              <!-- https://mvnrepository.com/artifact/org.springframework.data/spring-data-jpa -->
              <dependency>
                  <groupId>org.springframework.boot</groupId>
                  <artifactId>spring-boot-starter-data-jpa</artifactId>
                  <version>1.5.1.RELEASE</version>
              </dependency>
              <dependency>
                  <groupId>org.springframework.boot</groupId>
                  <artifactId>spring-boot-starter-web</artifactId>
              </dependency>
              <dependency>
                  <groupId>org.projectlombok</groupId>
                  <artifactId>lombok</artifactId>
                  <version>1.16.10</version>
              </dependency>
              <!-- alibaba的druid數(shù)據(jù)庫連接池 -->
              <dependency>
                  <groupId>com.alibaba</groupId>
                  <artifactId>druid</artifactId>
                  <version>1.0.11</version>
              </dependency>
              <dependency>
                  <groupId>com.fasterxml.jackson.core</groupId>
                  <artifactId>jackson-core</artifactId>
              </dependency>
              <dependency>
                  <groupId>com.fasterxml.jackson.core</groupId>
                  <artifactId>jackson-databind</artifactId>
              </dependency>
              <dependency>
                  <groupId>com.fasterxml.jackson.datatype</groupId>
                  <artifactId>jackson-datatype-joda</artifactId>
              </dependency>
              <dependency>
                  <groupId>com.fasterxml.jackson.module</groupId>
                  <artifactId>jackson-module-parameter-names</artifactId>
              </dependency>
              <!-- 分頁插件 -->
              <dependency>
                  <groupId>com.github.pagehelper</groupId>
                  <artifactId>pagehelper-spring-boot-starter</artifactId>
                  <version>1.1.2</version>
              </dependency>
              <dependency>
                  <groupId>com.alibaba</groupId>
                  <artifactId>druid-spring-boot-starter</artifactId>
                  <version>1.1.0</version>
              </dependency>
              <dependency>
                  <groupId>ch.qos.logback</groupId>
                  <artifactId>logback-core</artifactId>
                  <version>1.1.9</version>
              </dependency>
          </dependencies>

          以上是maven 的pom依賴設(shè)置,和redis相關(guān)的是

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


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


          spring-session-data-redis 支持redis session 共享


          application.yml 配置如下,這個(gè)配置讓我們的系統(tǒng)客戶獲取redis的連接。

          logging:  
            config: classpath:logback.xml  
            path: d:/logs  
          server:  
            port: 8080  
            session-timeout: 60  
            
          spring:  
              redis:  
                 database: 0  
                 host: 127.0.0.1  
                 port: 6379  
                 password:  
                 timeout: 0  
                 pool:  
                     max-active: 8  
                     max-wait: -1  
                     max-idle: 8  
                     min-idle: 0  
              session:  
                store-type: none 

          有點(diǎn)朋友是用application.properties的,只是編寫的結(jié)構(gòu)不一樣,內(nèi)容一一對應(yīng)就好了。

          接下來就是編寫config文件,使我們的系統(tǒng)能支持redis緩存session共享

          新建一個(gè)java文件 


          package com.hzucan.crmConfig;
          import
          org.springframework.context.annotation.Configuration;
          import
          org.springframework.session.data.redis.config.annotation.web.http.EnableRedisHttpSession;
          /**
          * Created by tongjianbin on 18/4/17.
          */
          @Configuration
          @EnableRedisHttpSession
          (maxInactiveIntervalInSeconds = 1800)
          public class RedisSessionConfig {

          }



          @EnableRedisHttpSession(maxInactiveIntervalInSeconds 1800)

          用于指定sess的過期時(shí)間,默認(rèn)是30分鐘,可以按系統(tǒng)的實(shí)際情況改寫maxInactiveIntervalInSeconds,設(shè)置session過期時(shí)間。


          在寫完配置類后,前萬記得要在在spring boot的啟動(dòng)類上寫上注解@EnableRedisHttpSession


          @SpringBootApplication
          @EnableCaching
          @EnableRedisHttpSession
          @EnableTransactionManagement
          @ComponentScan
          (basePackages = "com.hzucan")
          @MapperScan(basePackages = "com.hzucan.mapper")
          @EntityScan(basePackages = "com.hzucan.entity")
          public class Entry {
          public static void main(String[] args) throws Exception{
          SpringApplication.run(Entry.class,args);
          }
          }

          接下來寫一個(gè)測試類來進(jìn)行測試


          @EnableRedisHttpSession
          @Controller
          @RequestMapping
          (value= "/")
          public class IndexController {
          @Autowired
          private UserService userService;
          @Autowired
          HttpServletRequest request;
          @Autowired
          HttpServletResponse response;
          @Autowired
          HttpSession httpSession;

          @RequestMapping(value="/getSessionId")
          @ResponseBody
          public String getSessionId(HttpServletRequest request){Object o = httpSession.getAttribute("springboot");
          if
          (o == null){
          o = "spring boot 牛逼了!!!有端口"+request.getLocalPort()+"生成";
          httpSession.setAttribute("springboot", o);
          }

          return "端口=" + request.getLocalPort() + " sessionId=" + request.getSession().getId() +"<br/>"+o;
          }}

          啟動(dòng)springboot, 訪問http://localhost:8080/getSessionId


          網(wǎng)頁上顯示如下內(nèi)容:

          端口=8080 sessionId=5F1FB48698294843039010C1B8253B0D

          spring boot 牛逼了!!!有端口8080生成

          我們再查看redis


          當(dāng)session 失效的時(shí)候,我們再查看redis,發(fā)現(xiàn)session相關(guān)的key已經(jīng)沒有了,雖然我們這里是使用了單臺(tái)設(shè)備,但是通過看key是否存在redis里面,可以大致證明是否實(shí)現(xiàn) 了redis session共享,因?yàn)殡m然負(fù)責(zé)均衡會(huì)讓我們的請求轉(zhuǎn)發(fā)到不同的服務(wù)器,但是cookie里面的sessionId是不會(huì)變的,都會(huì)到同一個(gè)redis里面去查詢session。

          好了,到此已經(jīng)在我的crm里面通過redis 實(shí)現(xiàn)了session共享。

            作者 |  steventongjianbin

          來源 |  csdn.net/steventongjianbin/article/details/80012109


          加鋒哥微信: java3459  
          圍觀鋒哥朋友圈,天天推送Java干貨!

          瀏覽 75
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  青青草免费在线视频 | 欧美色图亚洲第一 | 大鸡吧插嫩逼视频网站免费 | 操笔逼视频 | 久久三级片电影视频 |