3.3Redis+Spring共享session

在以往通過(guò)nginx+tomcat實(shí)現(xiàn)負(fù)載均衡時(shí)俱济,利用redis來(lái)實(shí)現(xiàn)session共享冒签,原理是利用tomcat的session中間件tomcat-redis-session-manager,利用這個(gè)來(lái)替代servlet管理tomcat的session钟病。這樣非常好萧恕,而且是應(yīng)用無(wú)侵入的形式。

現(xiàn)在有好事者肠阱,開發(fā)了spring集成redis的組件來(lái)管理session票唆,原理其實(shí)和上面講的一樣,就是利用spring-session-data-redis這個(gè)插件來(lái)管理session屹徘。這個(gè)有個(gè)好處就是如果不用tomcat走趋,用jetty或weblogic一樣都可以實(shí)現(xiàn)session的共享。

下面來(lái)說(shuō)明一下具體實(shí)現(xiàn)方法噪伊,這里只講共享session的設(shè)置簿煌,其余都是springmvc的設(shè)置氮唯,具體配置參見 9.SpringMVC

添加依賴

<dependency>
      <groupId>org.springframework.session</groupId>
       <artifactId>spring-session-data-redis</artifactId>
       <version>1.2.1.RELEASE</version>
</dependency>
<dependency>
       <groupId>redis.clients</groupId>
        <artifactId>jedis</artifactId>
        <version>2.9.0</version>
</dependency>

這里需要添加兩個(gè)核心依賴,一個(gè)是spring集成redis和session的姨伟,另一個(gè)是redis.client惩琉,其余的都是springmvc的依賴。

web.xml里面添加session過(guò)濾器

 <filter>
        <filter-name>springSessionRepositoryFilter</filter-name>
        <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>springSessionRepositoryFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

session設(shè)值與取值

@Controller
@RequestMapping("/")
public class IndexController {
    /**
     * 模擬進(jìn)度登錄界面
     *
     * @param request
     * @return
     */
    @RequestMapping(value = "login")
    public String login(HttpServletRequest request) {
        return "login";
    }

    /**
     * 模擬登錄
     * @param request
     * @return
     */
    @RequestMapping(value = "checkLogin")
    public String checkLogin(HttpServletRequest request) {
        request.getSession().setAttribute("user", "admin");
        return "redirect:/index.htm";
    }

    /**
     * 模擬進(jìn)入首頁(yè)
     * @param request
     * @return
     */
    @RequestMapping(value = "index")
    public String index(HttpServletRequest request) {
        System.out.println(request.getSession().getAttribute("user"));
        return "index";
    }
}

這里模擬了三個(gè)請(qǐng)求授滓,第一個(gè)是進(jìn)入登錄界面琳水,第二個(gè)是模擬登錄,給session賦值般堆,第三個(gè)是進(jìn)入首頁(yè)在孝,通過(guò)session取值,都比較簡(jiǎn)單淮摔。

login.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <a href="checkLogin.htm">登錄</a>
</body>
</html>

index.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
當(dāng)前用戶:<%=session.getAttribute("user")%>
</body>
</html>

配置nginx負(fù)載均衡

這里采用nginx1.10版本私沮,配置兩個(gè)tomcat,端口分別是8080和8090和橙,對(duì)外是80

 #服務(wù)器的集群  
    upstream  critc.com {  #服務(wù)器集群名字   
        server    127.0.0.1:8080  weight=1;
        server    127.0.0.1:8090  weight=1;  
    }

 location / {
            root   html;
            index  index.html index.htm;
            proxy_pass http://critc.com;
        }

nginx集群比較容易配置仔燕,共需要修改兩個(gè)地方,第一是新建一個(gè)upstream魔招,配置兩個(gè)server的ip和端口晰搀,第二是在location節(jié)里新增proxy_pass

都配置完后,啟動(dòng)nginx

啟動(dòng)nginx

配置同時(shí)啟動(dòng)兩個(gè)tomcat

配置兩個(gè)tomcat

同時(shí)配置兩個(gè)tomcat办斑,一個(gè)是tomcat1外恕,一個(gè)是tomcat2,都部署chapter3_3_redis_spring_session這個(gè)應(yīng)用乡翅,一個(gè)端口是8080另一個(gè)是8090鳞疲,同時(shí)啟動(dòng)。

啟動(dòng)后通過(guò)http://localhost/login.htm訪問(wèn):

啟動(dòng)界面

點(diǎn)擊登錄按鈕蠕蚜,生成session尚洽,分別用兩個(gè)端口分別查看如下:

8080查看.png
8090查看.png

到這里,看到8080和8090兩個(gè)tomcat的session實(shí)現(xiàn)共享靶累。
可以看一下redis里面是怎么存儲(chǔ)這個(gè)session的:

redis存儲(chǔ)session

這里強(qiáng)調(diào)一點(diǎn)腺毫,只要使用標(biāo)準(zhǔn)的servlet api調(diào)用session,在底層就會(huì)通過(guò)Spring Session得到的挣柬,并且會(huì)存儲(chǔ)到Redis或其他你所選擇的數(shù)據(jù)源中拴曲。

可以手工操作一下具體實(shí)現(xiàn)方式。

源碼下載

[本工程詳細(xì)源碼]
(https://github.com/chykong/java_component/tree/master/chapter3_3_redis_spring_session)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末凛忿,一起剝皮案震驚了整個(gè)濱河市澈灼,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖叁熔,帶你破解...
    沈念sama閱讀 206,839評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件委乌,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡荣回,警方通過(guò)查閱死者的電腦和手機(jī)遭贸,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)心软,“玉大人壕吹,你說(shuō)我怎么就攤上這事∩玖澹” “怎么了耳贬?”我有些...
    開封第一講書人閱讀 153,116評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)猎唁。 經(jīng)常有香客問(wèn)我咒劲,道長(zhǎng),這世上最難降的妖魔是什么诫隅? 我笑而不...
    開封第一講書人閱讀 55,371評(píng)論 1 279
  • 正文 為了忘掉前任腐魂,我火速辦了婚禮,結(jié)果婚禮上逐纬,老公的妹妹穿的比我還像新娘蛔屹。我一直安慰自己,他們只是感情好豁生,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,384評(píng)論 5 374
  • 文/花漫 我一把揭開白布兔毒。 她就那樣靜靜地躺著,像睡著了一般沛硅。 火紅的嫁衣襯著肌膚如雪眼刃。 梳的紋絲不亂的頭發(fā)上绕辖,一...
    開封第一講書人閱讀 49,111評(píng)論 1 285
  • 那天摇肌,我揣著相機(jī)與錄音,去河邊找鬼仪际。 笑死围小,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的树碱。 我是一名探鬼主播肯适,決...
    沈念sama閱讀 38,416評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼成榜!你這毒婦竟也來(lái)了框舔?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,053評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎刘绣,沒(méi)想到半個(gè)月后樱溉,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,558評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡纬凤,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,007評(píng)論 2 325
  • 正文 我和宋清朗相戀三年福贞,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片停士。...
    茶點(diǎn)故事閱讀 38,117評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡挖帘,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出恋技,到底是詐尸還是另有隱情拇舀,我是刑警寧澤,帶...
    沈念sama閱讀 33,756評(píng)論 4 324
  • 正文 年R本政府宣布猖任,位于F島的核電站你稚,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏朱躺。R本人自食惡果不足惜刁赖,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,324評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望长搀。 院中可真熱鬧宇弛,春花似錦、人聲如沸源请。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)谁尸。三九已至舅踪,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間良蛮,已是汗流浹背抽碌。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留决瞳,地道東北人货徙。 一個(gè)月前我還...
    沈念sama閱讀 45,578評(píng)論 2 355
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像皮胡,于是被迫代替她去往敵國(guó)和親痴颊。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,877評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理屡贺,服務(wù)發(fā)現(xiàn)蠢棱,斷路器锌杀,智...
    卡卡羅2017閱讀 134,600評(píng)論 18 139
  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 46,748評(píng)論 6 342
  • 原定的坎布拉森林公園,結(jié)果因半路塌方路堵了泻仙,走不了抛丽,臨時(shí)更改路線到國(guó)家地質(zhì)公園看丹霞地貌,結(jié)果我們到了之后發(fā)現(xiàn)饰豺,很...
    行走的藍(lán)天白云閱讀 263評(píng)論 0 0
  • 前言 原文地址 源碼地址 了解co的前提是?已經(jīng)知曉generator是什么冤吨,可以看軟大神的Generator 函...
    謙龍閱讀 212評(píng)論 0 0
  • It is the first day in 2017. I took my son to Zhonghuamen...
    老蠻腰閱讀 109評(píng)論 0 2