SpringBoot整合NoSql--(四)Session共享

簡介:nginx

  正常狀況下,HttpSession是經過Servlet 容器建立並進行管理的,建立成功以後都是保存在內
存中。若是開發者須要對項目進行橫向擴展搭建集羣,那麼能夠利用一些硬件或者軟件工具來作負
載均衡,此時,來自同一用戶的HTTP請求就有可能被分發到不一樣的實例上去,如何保證各個實例
之間Session的同步就成爲一個必 須解決的問題。web

  Spring Boot 提供了自動化的 Session共享配置,它結合Redis能夠很是方便地解決這個問題。使用Redis 解決Session共享問題的原理很是簡單,就是把本來存儲在不一樣服務器上的Session拿出來放在一個獨立的服務器上。redis

  

  當一個請求到達Nginx服務器後,首先進行請求分發,假設請求被real server 1處理了,real server 1在處理請求時,不管是存儲Session仍是讀取Session,都去操做Session服務器而不是操做自身內存中的Session,其餘real server在處理請求時也是如此,這樣就能夠實現Session共享了。spring

 

Demo:centos

  首先添加Redis和Session依賴,服務器

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

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

application.propertiessession

#使用0號庫,redis默認0-15,16個庫
spring.redis.database=0 
spring.redis.host=192.168.205.100
spring.redis.port=6379
spring.redis.password=123456
spring.redis.jedis.pool.max-active=8
spring.redis.jedis.pool.max-idle=8
spring.redis.jedis.pool.max-wait=-1ms
spring.redis.jedis.pool.min-idle=0

Controller:app

  這裏提供了兩個方法,一個save接口用來向Session中存儲數據,還有一一個get 接口用來從Session中獲取數據。spring-boot

  這裏注入了項目啓動的端口號server.port, 主要是爲了區分究竟是哪一個服務器提供的服務。另外,雖然仍是操做的HttpSession,可是實際上HttpSession容器已經被透明替換,真正的Session此時存儲在Redis服務器上。工具

@RestController
public class HelloController {

    @Value("${server.port}")
    String port;

    @PostMapping("/save")
    public String saveName(String name, HttpSession session) {
        session.setAttribute("name", name);
        return port;
    }

    @GetMapping("/get")
    public String getName(HttpSession session) {
        return port + ":"
                + session.getAttribute("name").toString();
    }

}

將項目打成jar上傳到centos,

 

 

 

 

 2.Nginx

下載--配置

 

 啓動:nginx默認80端口

[root@localhost sbin]# /usr/local/nginx/sbin/nginx

 

配置:

[root@localhost sbin]# vi /usr/local/nginx/conf/nginx.conf

 

 重啓nginx

[root@localhost sbin]# /usr/local/nginx/sbin/nginx -s reload

輸入:

http://192.168.205.100:80/save?name=eeeee

調用80端口,實際上使用8080

 

 http://192.168.205.100:80/get

調用80其實是8081

相關文章
相關標籤/搜索