1. 程式人生 > >springboot+redis叢集實現redis叢集狀態下的session共享

springboot+redis叢集實現redis叢集狀態下的session共享

springboot+redis的案例很多,但是redis叢集的案例很少,so~筆者在這裡記錄一下~

一、springboot依靠@EnableRedisHttpSession來開啟spring session支援,該註解是由spring-session-data-redis提供的,所以在pom.xml檔案中新增如下依賴:

	<!-- redis -->  
	<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>

二、配置@EnableRedisHttpSession來開啟spring session支援

方法一:在springboot啟動類上加上@EnableRedisHttpSession來開啟spring session支援,其中maxInactiveIntervalInSeconds 的值是session過期時間

方法二:重建redisSession管理類,加上EnableRedisHttpSession配置

@Configuration  

@EnableRedisHttpSession  (maxInactiveIntervalInSeconds = 1800)

public class RedisSessionConfig { 


} 

三、在配置檔案(application.properties檔案或者yaml檔案)中配置redis伺服器的位置

spring.redis.cluster.nodes=Centos6701:6379,Centos6701:6380,Centos6702:6380,Centos6702:6379,Centos6703:6380,Centos6703:6379
yaml:
 spring:  
   redis:  
     cluster:  
       nodes:  
        - Centos6701:6379  
        - Centos6701:6380
        - Centos6702:6380
        - Centos6702:6379 
        - Centos6703:6379 
        - Centos6703:6380

四、測試

1、 首先在application.properties中進行設定開啟兩個tomcat服務,埠分別為8080和9090

2、定義一個Controller

@RestController  

@RequestMapping(value = "/admin/v1")  

public class QuickRun {  


    @RequestMapping(value = "/first", method = RequestMethod.GET)  

    public Map<String, Object> firstResp (HttpServletRequest request){  


        Map<String, Object> map = new HashMap<>();  

        request.getSession().setAttribute("request Url", request.getRequestURL());  

        map.put("request Url", request.getRequestURL());  

        return map;  

    }  

 
    @RequestMapping(value = "/sessions", method = RequestMethod.GET)  

    public Object sessions (HttpServletRequest request){  


        Map<String, Object> map = new HashMap<>();  

        map.put("sessionId", request.getSession().getId());  

        map.put("message", request.getSession().getAttribute("map"));  

        return map;  
    }  

} 

    3、啟動之後進行訪問測試,首先訪問8080埠的tomcat,返回

{"request Url":"http://localhost:8080/admin/v1/first"}

接著訪問8080埠的sessions,返回

{"sessionId":"efcc85c0-9ad2-49a6-a38f-9004403776b5","message":"http://localhost:8080/admin/v1/first"}

最後訪問9090埠的sessions,返回

{"sessionId":"efcc85c0-9ad2-49a6-a38f-9004403776b5","message":"http://localhost:8080/admin/v1/first"}

可見,8080與9090兩個伺服器返回結果一樣,實現了session的共享

  如果此時再訪問9090埠的first的話,首先返回:

{"request Url":"http://localhost:9090/admin/v1/first"} 

而兩個伺服器的sessions都是返回:

{"sessionId":"efcc85c0-9ad2-49a6-a38f-9004403776b5","message":"http://localhost:9090/admin/v1/first"} 

  通過spring boot + redis來實現session的共享非常簡單,而且用處也極大,配合nginx進行負載均衡,便能實現分散式的應用了。

本次的redis並沒有進行主從、讀寫分離、使用zookeeper進行負載均衡等等配置,而且nginx的單點故障也是應用的障礙。

參考文件:

相關推薦

springboot+redis叢集實現redis叢集狀態session共享

springboot+redis的案例很多,但是redis叢集的案例很少,so~筆者在這裡記錄一下~ 一、springboot依靠@EnableRedisHttpSession來開啟spring session支援,該註解是由spring-session-data-redi

redis叢集實現(一)叢集架構與初始化

redis是一個高可用、高效能、高可擴充套件性的基於記憶體也支援持久化儲存的kv儲存資料庫,redis相比較於之前的kv儲存memcached而言,不但支援的value型別大大增加,並且還支援資料的持久化,彌補了memcached的不能持久化的缺點,但是在3.0之前的red

springboot--redis實現redis的資料操作)和 StringRedisTemplate的常用方法

引入依賴 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId&

C#操作Redis,C#實現Redis分布式鎖

ges mage c# png http 字符串 images red -s 功能描述 字符串常規操作 hashset操作 set操作 keys操作 分布式鎖操作 代碼截圖 購買詳詢:QQ 506023315,只要10元(屌絲籌房中) C#操作Red

Spring Boot Redis-Sentinel—實現Redis高可用之哨兵模式

廢話簡論     Redis高可用之哨兵模式它就是,當你的reids掛掉了之後,它可以自己切換到其他redis上.不影響使用者的正常使用. 簡述Sentinel:      Sentinel具有四個特點: 監控,通知,自動故障轉移,配置提供者 監控:哨兵不斷的檢查ma

nginx+Tomcat 叢集介紹,輪詢,session共享如何實現(面試用)

(反向代理的解釋:反向代理(Reverse Proxy)方式是指以代理伺服器來接受internet上的連線請求,然後將請求轉發給內部網路上的伺服器,並將從伺服器上得到的結果返回給internet上請求連線的客戶端,此時代理伺服器對外就表現為一個伺服器。) 重點

分散式叢集環境Session共享的簡單解決方案

關於Cookie和Session的功能與工作原理,在這裡我就不再敘述了,大家想要了解可以看一下我的上一篇部落格,講的還是很細緻的。 但是之前講的Session是執行在一臺伺服器上的,所有的訪問都會到達我們的唯一伺服器上,這樣我們可以根據客戶端傳來的sessionID,來獲取

分散式架構學習之:032--使用Redis3.0叢集實現Tomcat叢集Session共享

redis.properties # redis hosts ex: 127.0.0.1:6379, 127.0.0.2:6379, 127.0.0.2:6380, .... re

Spring Boot(十一)Redis整合從Docker安裝到分散式Session共享

一、簡介 Redis是一個開源的使用ANSI C語言編寫、支援網路、可基於記憶體亦可持久化的日誌型、Key-Value資料庫,並提供多種語言的API,Redis也是技術領域使用最為廣泛的儲存中介軟體,它是「Remote Dictionary Service」首字母縮寫,也就是「遠端字典服務」。 Red

安裝了vmware tools但是虛擬機器在開機狀態無法共享資料夾

產生根源是因為Linux kernel升級之後,vmware-tools沒有及時更新。 網上有個第三方的解決方案。測試centos6.4和Ubuntu 14.04 desktop可用 1、將vmware-tools複製出來 2、下載patch檔案,連結見底部 3、 #

memcached實現集群中的session共享存儲優缺點

session   cookie 優點說明: 1. memcached是內存緩存,在讀寫速度上會比普通files時快很多 2. 可以解決多個服務器公用session的難題 缺點說明: 1. session數據都保存在memory中,持久化方面有所欠缺,但對session

使用memcache實現單點登入(session共享

負載均衡 在大型應用中,基本上都要使用叢集或負載均衡來滿足大訪問量,但這樣一來,就會出現一個問題,當一個使用者登入之後,如果訪問的URL被定向到另外的伺服器上,那麼session就會丟失。這是一個很嚴重的問題。如何解決這樣一個問題呢?這裡有很多種方式,以下簡要說明: 1) 

spring Session + Redis叢集 + 哨兵部署實現Session共享

1.共享Session問題 HttpSession是通過Servlet容器建立和管理的,像Tomcat/Jetty都是儲存在記憶體中的。而如果我們把web伺服器搭建成分散式的叢集,然後利用LVS或Nginx做負載均衡,那麼來自同一使用者的Http請求將有可能被分發到兩個不同

用Jedis獲取redis連線(叢集和非叢集狀態)

第一:非叢集狀態下 非叢集狀態下用Jedis獲取redis連線,得到Jedis物件即可,一共有兩種: 1.利用Jedis構造器,僅限用於測試,在實際專案中肯定是用JedisPool。   Jedis(String host);   Jedis(String host , i

SpringBoot通過JedisCluster連線Redis叢集(分散式專案)

分散式專案 SpringBoot + Redis使用 現在開發流行微服務、分散式,基於這種情況需要使用redis不想每個專案都去寫重複的程式碼,所以我在工具包中封裝了redis這一塊的連線,但是問題是所有的專案都會依賴我的基礎包,卻不是所有的專案都要使用redis。所以我需要根據業務

通過策略模式來實現redis的單機版和叢集版的轉換

(1)首要介面JedisClient package com.wine.jedis; public interface JedisClient { String set(String key, String value); String get(String key); Boo

spring-boot+Redis實現簡單的分散式叢集session共享

  寫在前面:      首先宣告,筆者是一名Java程式設計屆的小學生。前面一直在幾家公司裡面做開發,其實都是一些傳統的專案,對於像分散式啦,叢集啦一些大型的專案接觸的很少,所以一直沒有自己整合和實現過。由於最近幾天專案不是很忙,自己又有點時間

SpringBoot整合Redis、和Redis叢集

一、SpringBoot整合Redis 步驟:1.新增依賴: <!--redis --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId

shiro+redis實現叢集session共享

1.加入依賴 <dependency> <groupId>org.crazycake</groupId> <artifactId>shiro-redis</artifactId> <version>2.4.

基於nutcracker的redis叢集實現 阿里雲

坑還是比較多的吧 安全組必不可少開啟 22121 22122 22123 22124 22222 aliyun 搭建redis叢集https://my.oschina.net/u/3647713/blog/1982995 安裝autoconf cd /usr/local wget http://f