1. 程式人生 > >基於Spring Boot-Spring Session-Redis的分散式Session共享解決方案

基於Spring Boot-Spring Session-Redis的分散式Session共享解決方案

分散式Web網站一般都會碰到叢集session共享問題,之前也做過一些Spring3的專案,當時解決這個問題做過兩種方案,一是利用nginx,session交給nginx控制,但是這個需要額外工作較多;還有一種是利用一些tomcat上的外掛,修改tomcat配置檔案,讓tomcat自己去把Session放到Redis/Memcached/DB中去。這兩種各有優缺,也都能解決問題。

但是現在專案全線Spring Boot,並不自己維護Tomcat,而是由Spring去啟動Tomcat。這樣就會有一個問題:在伺服器上並不存在一個持久存在的Tomcat程式,這樣也無從去修改Tomcat的配置檔案了。經過了一番搜尋,發現Spring果然對這個問題有自己的解決方案,那就是Spring-Session.

Spring-Session是通過過濾器實現的session共享,具體原理可以自己去官網查,這裡只說一下如何配置。整個專案基於Spring Boot,如果不是Boot專案就需要自己去調整了。

專案需要先準備一個Redis服務,在本地啟動一個即可。還需要有一個已經使用session但是未做session共享的Spring Boot專案,下面我就講述一下如何給這個專案加上基於redis的session共享。

引入redis和spring-session對應的jar包:

        <dependency>
		    <groupId>org.springframework.session</groupId>
		    <artifactId>spring-session-data-redis</artifactId>
		</dependency>
		<!-- springboot 整合redis -->
		<dependency>  
		    <groupId>org.springframework.boot</groupId>  
		    <artifactId>spring-boot-starter-redis</artifactId>  
		    <version>1.0.1.RELEASE</version>
		</dependency>

2.配置redis服務

在專案目前在使用的properties檔案中,加入如下配置:


spring.redis.database=0
spring.redis.host=127.0.0.1
spring.redis.port=6379
spring.redis.password=
#連線池最大連線數
spring.redis.pool.max-active=8
#連線池最大阻塞時間:負數表示沒有限制
spring.redis.pool.max-wait=-1
#最大空閒連結數
spring.redis.pool.max-idle=8
#最小空閒連結數
spring.redis.pool.min-idle=0
#連線超時的時間(ms)
spring.redis.timeout=0

3.spring配置:

在專案的目錄中,建立一個Config.java檔案(名稱隨意)

@Configuration
@EnableRedisHttpSession 
public class Config {
 
        @Bean
        public JedisConnectionFactory connectionFactory() {
                return new JedisConnectionFactory(); 
        }
}

其中@EnableRedisHttpSession這個註解是中讓spring開啟一個攔截器Filter,來實現Session共享;其中配置的這個Bean是用來載入Properties中的redis引數,連線redis服務;

如果不使用Security,下面的幾步就不用做了,這個類中配置的Bean也不用配置。

Spring Security 配置

在專案中新增該類:

public class SecurityInitializer extends AbstractSecurityWebApplicationInitializer {
 
        public SecurityInitializer() {
                super(SecurityConfig.class, Config.class);
        }
}

super()的第二個引數,就是我們上面的那個Config檔案。新增這個配置檔案後,Spring Security就會把Session放到Redis中,這樣基於Spring Security的專案也可以實現Session共享了。

Initializer 配置

這一步寫法異常簡單,還是建立檔案:

public class Initializer extends AbstractHttpSessionApplicationInitializer {
 
}

就這樣,繼承一個類即可。

大功告成!簡單的超乎想像,這就是Spring Boot的優勢所在。下面我們來自己登入一下,看看Spring Security是否把Session放到Redis中。

(登入過程我就不講了,,在自己專案中呼叫一下Security的登入即可)

然後用redis-cli連線到redis,執行keys *

會看到如下:

你會發現redis裡多了一堆以spring:session:***為key的東西,這樣就說明Spring Security確實把Session放到了我們配置的redis中。這樣就可以實現session共享了。

相關推薦

Spring boot整合websocket實現分散式websocketsession共享(一)--基於redis的釋出訂閱

本文主要是針對分散式場景下的使用websocket的一個解決方案。我們以下面的圖來說明下業務使用場景。   針對如圖的情況,很多人第一時間想到的是websocket的session共享,這是大多數的第一反應。很遺憾的是,websocketsession是不支援序列化操作

spring boot專案中redis分散式鎖實現 程式碼模板

1,在application.properties中配置redis主機:spring.redis.host=127.0.0.1 spring.redis.port=6379 spring.redis.password=XXX2,新增redis配置檔案:cache/RadisL

spring-boot專案mapperBean找不到問題解決方案

使用spring-boot整合mybatis時遇到了載入不到mapper類檔案bean的情況,網上找了最終終於解決了,我在這裡分享一下整個排查的流程並把網上哪些方法都進行一下彙總。錯誤截圖:上面這個截圖是maven install的時候報出的,大概意思就是沒有可用的Artic

詳解基於Spring Boot/Spring Session/Redis分散式Session共享解決方案

分散式Web網站一般都會碰到叢集session共享問題,之前也做過一些Spring3的專案,當時解決這個問題做過兩種方案,一是利用nginx,session交給nginx控制,但是這個需要額外工作較多;還有一種是利用一些tomcat上的外掛,修改tomcat配置檔案,讓tom

基於Spring Boot-Spring Session-Redis分散式Session共享解決方案

分散式Web網站一般都會碰到叢集session共享問題,之前也做過一些Spring3的專案,當時解決這個問題做過兩種方案,一是利用nginx,session交給nginx控制,但是這個需要額外工作較多;還有一種是利用一些tomcat上的外掛,修改tomcat配置檔案,讓tom

spring boot 中使用redis session

錯誤 dap isa name art res 5.0 fir sync   spring boot 默認的httpsession是存在內存中。這種默認方式有幾個缺點:1、當分布式部署時,存在session不一致的問題;2、當服務重啟時session就會丟失,這時候用戶就需

Spring Session + Redis 實現Session分散式儲存

1 Redis的安裝及其基本使用 1.1 環境說明 CentOS7.3 Redis-3.2.10 1.2 Redis下載 [[email protected] Downloads]# wget http://download.

實戰——session共享Spring Boot + Spring Session + Redis

目的:實現伺服器間session共享 環境:一臺CentOS7的虛擬機器,虛擬機器安裝了Redis資料庫和Docker容器,Docker運行了1臺Nginx容器和2臺Tomcat容器 結構圖: 本地建立一個域名www.example.com指向ip地址192.168.40

Spring-Session+Redis實現session共享

1、新增依賴 <dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-redis</artifactId>

使用Spring-Session Redis實現Session共享

知其然,還要知其所以然 ! 本篇介紹Spring-Session的整個實現的原理。以及對核心的原始碼進行簡單的介紹! 實現原理介紹 實現原理這裡簡單說明描述: 就是當Web伺服器接收到http請求後,當請求進入對應的Filter進行過濾,將原本需要由web伺服器

Nginx+Tomcat搭建叢集,Spring Session+Redis實現Session共享

小夥伴們好久不見!最近略忙,部落格寫的有點少,嗯,要加把勁。OK,今天給大家帶來一個JavaWeb中常用的架構搭建,即Nginx+Tomcat搭建服務叢集,然後通過Spring Session+Redis實現Session共享。 閱讀本文需要有如下知識點:

Spring Session + Redis 實現session共享

這裡主要介紹一下基於xml的配置:1. 在pom.xml檔案中引入所需依賴<!-- spring-session begin--> <dependency>

單點登入實現(spring session+redis完成session共享

v一、前言   專案中用到的SSO,使用開源框架cas做的。簡單的瞭解了一下cas,並學習了一下 ,有興趣的同學也可以學習一下,寫個demo玩一玩。 v二、工程結構      我模擬了 sso的客戶端和sso的服務端, sso-core中主要是一些sso需要的過濾器和工具類

spring-session實現分散式session共享及自定義sessionid

public class MyHttpSessionStrategy implements HttpSessionStrategy { private final Logger logger = LoggerFactory.getLogger(WlwHttpSessionStrategy.class

分散式定時任務解決方案-spring boot整合JMS以及Redis實現

最近需要設計一個分散式的定時任務的方案,從理論上來說,Quartz已經提供了一套完善的分散式定時任務的解決方案,但是由於系統目前已有JMS叢集和Redis Sentinel叢集,如果想要在目前已有的架構上,實現了一個簡單的分散式定時任務的話,如何來做了?總體架構設計圖如下:

Spring Boot 一個依賴搞定 session 共享,沒有比這更簡單的方案了!

有的人可能會覺得題目有點誇張,其實不誇張,題目沒有使用任何修辭手法!認真讀完本文,你就知道鬆哥說的是對的了! 在傳統的單服務架構中,一般來說,只有一個伺服器,那麼不存在 Session 共享問題,但是在分散式/叢集專案中,Session 共享則是一個必須面對的問題,先看一個簡單的架構圖: 在這樣的架構中

spring boot集成redis緩存

time pom find pre idle empty cep wait 參數 spring boot項目中使用redis作為緩存。 先創建spring boot的maven工程,在pom.xml中添加依賴 <dependency>

Spring Boot + spring-data-redis

調用 ons cor spring edi start ota struct out Redis Redis是緩存, 消息隊列, 多種類型的key-value存儲服務. Spring Boot Spring Boot為Lettcue和Jedis客戶端提供自動註入配置

Spring Boot下的Redis緩存實戰

Spring Cache Redis 緩存 最近在做的一個系統涉及到基礎數據的頻繁調用,大量的網絡開銷和數據讀寫給系統帶來了極大的性能壓力,我們決定引入緩存機制來緩解系統壓力。什麽是緩存提起緩存機制,大概10個程序員總有5種不同的解釋吧(姑且認為只有一半的程序員是通過復制粘貼來學習知識的),我也不

redis jwt spring boot spring security 實現api token 驗證

BE output date art parent byte[] web rmi time 文章地址:http://www.haha174.top/article/details/258083 項目源碼:https://github.com/haha174/jwt-toke