Tomcat集群通过redis实现session共享
Tomcat集群通過(guò)redis實(shí)現(xiàn)session共享
最近在XXX項(xiàng)目上做了tomcat集群的session共享,閑來(lái)無(wú)事鄙人將整個(gè)踩坑的過(guò)程粗糙的記錄下來(lái),給同學(xué)們分享一波,整個(gè)過(guò)程無(wú)硬編碼,爽歪歪!
為什么要持久化session(共享session)呢?因?yàn)樵诳蛻舳嗣總€(gè)用戶的Session對(duì)象存在Servlet容器中,如果Tomcat服務(wù)器重啟或者宕機(jī)的話,那么該session就會(huì)丟失,而客戶端的操作會(huì)由于session丟失而造成數(shù)據(jù)丟失;如果當(dāng)前用戶訪問(wèn)量巨大,每個(gè)用戶的Session里存放大量數(shù)據(jù)的話,那么就很占用服務(wù)器大量的內(nèi)存,進(jìn)而致使服務(wù)器性能受到影響。數(shù)據(jù)庫(kù)持久化session,分為物理數(shù)據(jù)庫(kù)和內(nèi)存數(shù)據(jù)庫(kù)。物理數(shù)據(jù)庫(kù)備份session,由于其性能原因,不推薦;內(nèi)存數(shù)據(jù)庫(kù)可以使用redis和memcached來(lái)存儲(chǔ)session。
實(shí)現(xiàn)的效果:當(dāng)客戶端訪問(wèn)Nginx服務(wù)器時(shí),Nginx負(fù)載均衡會(huì)自動(dòng)將請(qǐng)求轉(zhuǎn)發(fā)到Tomcat1節(jié)點(diǎn)或Tomcat2節(jié)點(diǎn)服務(wù)器,以減輕Tomcat壓力,從而達(dá)到Tomcat集群化部署,為了使各Tomcat之間共享同一個(gè)Session,將采用Redis緩存服務(wù)來(lái)集中管理Session存儲(chǔ)。Nginx實(shí)現(xiàn)負(fù)載均衡,并使用Redis實(shí)現(xiàn)session共享。
步驟:
1.添加以下6個(gè)依賴:
坑:注意jar包的版本,如果版本對(duì)應(yīng)不上會(huì)導(dǎo)致應(yīng)用程序啟不起來(lái),這兒我就是由于版本沒對(duì)應(yīng)上花了很長(zhǎng)時(shí)間排查問(wèn)題,吐血!細(xì)節(jié)都被大佬封裝進(jìn)去了有興趣的同學(xué)可以look一look源碼。
2.需要添加session的配置文件和過(guò)濾器,具體如下:
web.xml需要添加一個(gè)過(guò)濾器,用于將session存入redis
在spring配置文件夾里面新建一個(gè)xml文件:applicationContext-session.xml 該xml主要是redis連接方式的配置以及redis存儲(chǔ)session,xml內(nèi)容如下:
redis單機(jī)配置:
redis 集群配置:
注意:如果redis是集群環(huán)境,則這塊必須配成集群方式,否則應(yīng)用程序無(wú)法啟動(dòng)。
session配置:
注意:domainName必須配成網(wǎng)站的域名,不能配域名的ip或者負(fù)載的ip,否則拿不到session導(dǎo)致無(wú)法登錄。
3.在應(yīng)用程序的applicationContext.xml引入applicationContext-session.xml
注意:session中不要存儲(chǔ)不可序列化的對(duì)象,序列化的類各個(gè)應(yīng)用要一致,例如A應(yīng)用在session中存儲(chǔ)了個(gè)com.hanweb.User,B應(yīng)用需要用同樣類路徑的User(com.hanweb.User)來(lái)獲取,否則失敗。
4.因?yàn)槲覀兪欠?wù)器集群,多服務(wù)器跨服務(wù)器共享session,要在tomcat里面配置redis(tomcat/conf/context.xml),并且引入相關(guān)jar包,具體如下:
首先引入對(duì)應(yīng)的jar包:
然后修改tomcat/conf/context.xml文件:
注意:tomcat-redis-session-manager 是開源的,所以在引入className引入類名的時(shí)候最好將所下的jar包反編譯看下類路徑、名稱是否跟你引入的一致,否則啟動(dòng)tomcat的時(shí)候會(huì)報(bào)類找不到的錯(cuò)誤。
over!集群間的session共享就是如此簡(jiǎn)單。當(dāng)然,如果想知其所以然,需要翻閱源碼,當(dāng)然我也只是大概看了一下,看不下去了!
預(yù)知后事如何,且聽下回分解,散會(huì)!
總結(jié)
以上是生活随笔為你收集整理的Tomcat集群通过redis实现session共享的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: nextcloud显示内部服务器,Nex
- 下一篇: Fota升级