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