實現(xiàn)Nginx負載均衡誉己、Session共享、Redis集群(一)

前期項目基于Spring 3.1域蜗,現(xiàn)在要實現(xiàn)Nginx負載均衡巨双、Session共享噪猾、Redis集群(Redis-Sentinel哨兵模式)

實現(xiàn)Session共享

  1. 添加項目依賴
   <dependency>
        <groupId>org.springframework.session</groupId>
        <artifactId>spring-session-data-redis</artifactId>
        <version>1.2.1.RELEASE</version>
    </dependency>

以上依賴相當(dāng)于引用了如下依賴

   <dependency>
        <groupId>org.springframework.data</groupId>
        <artifactId>spring-data-redis</artifactId>
        <version>1.7.3.RELEASE</version>
    </dependency>

    <dependency>
        <groupId>org.springframework.session</groupId>
        <artifactId>spring-session</artifactId>
        <version>1.2.2.RELEASE</version>
    </dependency>

    <dependency>
        <groupId>redis.clients</groupId>
        <artifactId>jedis</artifactId>
        <version>2.9.0</version>
    </dependency>

    <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-pool2</artifactId>
        <version>2.4.2</version>
    </dependency>
  1. spring-session.xml配置
    <bean id="redisHttpSessionConfiguration"
             class="org.springframework.session.data.redis.config.annotation.web.http.RedisHttpSessionConfiguration">
            <property name="cookieSerializer" ref="cookieSerializer"/>
            <property name="maxInactiveIntervalInSeconds" value="1800"/>
    </bean>
    <bean id="cookieSerializer"   class="org.springframework.session.web.http.DefaultCookieSerializer">
            <property name="cookieName" value="SESSION"/>
    </bean>
    <bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
            <property name="maxIdle" value="10"/>
            <property name="maxTotal" value="40"/>
    </bean>
    <bean id="jedisConnectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">
            <property name="hostName" value="10.45.10.72"/>
            <property name="port" value="6379"/>
            <property name="password" value="specialpassword"/>
            <property name="poolConfig" ref="jedisPoolConfig"/>
            <property name="usePool" value="true"/>
            <property name="database" value="2"/>
     </bean>
  • 單節(jié)點Redis
  <bean class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">
      <property name="hostName" value="${redis.host}" />
      <property name="port" value="${redis.port}" />
      <property name="password" value="${redis.password}" />
  </bean>
  • 集群redis
  <bean id="sentinelConfig" class="org.springframework.data.redis.connection.RedisSentinelConfiguration">
      <constructor-arg name="master" value="${redis.master}" />
      <constructor-arg name="sentinelHostAndPorts">
          <set>
              <value>127.0.0.1:2679</value><!--配置redis哨兵-->
              <value>127.0.0.1:2678</value>
          </set>
      </constructor-arg>
  </bean>

  <bean class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">
      <constructor-arg ref="sentinelConfig" />
      <property name="password" value="${redis.password}"/>
  </bean>
  1. web.xml配置
<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>

這里配置的時候要注意,一般要把springSessionRepositoryFilter配置為web.xml中所有filter中的第一位筑累,因為只有配置在最前面畏妖,才能使得請求第一個經(jīng)過該filter,從而后續(xù)處理中的所有request使用的session都是經(jīng)過spring包裝的redis session疼阔。
Spring redis處理的方式其實是將原始的HttpServletRequest通過HttpServletRequestWrapper類重寫getSession()方法實現(xiàn)的,并且在filter中它以偷天換日的方式將原始的HttpRequestServlet用該類替換了半夷。

  • Spring中還有一種獲取HttpServletRequest 的方式婆廊,即自動注入:
@Autowired
private HttpServletRequest request;
/*
*通過這種方式拿到的request,你會發(fā)現(xiàn)直接通過request.getSession()拿到的并不是你想要的redis session而是原始的session巫橄√粤冢可以通過如下方式獲取。
*(機智的spring已經(jīng)幫你把他的引用放在原始request的attribute中了) 的方式取得你想要的redis session湘换。
*因為這里自動注入的其實只是一個spring封裝過的HttpServletRequest的代理類宾舅,他傳的值和controller中獲取的是不一樣的。
*/
HttpSession session = (HttpSession)request.getAttribute("javax.servlet.http.HttpServletRequestWrapper");
  • Spring session只是共享session的一種方式彩倚,還有一種比較常見的方式是通過tomcat的session管理來處理共享session筹我。Spring session的好處在于它并不依賴于tomcat容器,與tomcat很好的解耦了帆离,包括他的配置都更加的方便蔬蕊,并且tomcat不管是版本7還是8都可以使用同一套方式。不過我相信最適合項目的方式就是最好的方式哥谷。

[參考文章列表]
http://www.reibang.com/p/3d5e83205a7a
https://my.oschina.net/firstbing/blog/1559728

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末岸夯,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子们妥,更是在濱河造成了極大的恐慌猜扮,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,843評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件监婶,死亡現(xiàn)場離奇詭異旅赢,居然都是意外死亡,警方通過查閱死者的電腦和手機压储,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,538評論 3 392
  • 文/潘曉璐 我一進店門鲜漩,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人集惋,你說我怎么就攤上這事孕似。” “怎么了刮刑?”我有些...
    開封第一講書人閱讀 163,187評論 0 353
  • 文/不壞的土叔 我叫張陵喉祭,是天一觀的道長养渴。 經(jīng)常有香客問我,道長泛烙,這世上最難降的妖魔是什么理卑? 我笑而不...
    開封第一講書人閱讀 58,264評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮蔽氨,結(jié)果婚禮上藐唠,老公的妹妹穿的比我還像新娘。我一直安慰自己鹉究,他們只是感情好宇立,可當(dāng)我...
    茶點故事閱讀 67,289評論 6 390
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著自赔,像睡著了一般妈嘹。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上绍妨,一...
    開封第一講書人閱讀 51,231評論 1 299
  • 那天润脸,我揣著相機與錄音,去河邊找鬼他去。 笑死毙驯,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的灾测。 我是一名探鬼主播尔苦,決...
    沈念sama閱讀 40,116評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼行施!你這毒婦竟也來了允坚?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,945評論 0 275
  • 序言:老撾萬榮一對情侶失蹤蛾号,失蹤者是張志新(化名)和其女友劉穎稠项,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體鲜结,經(jīng)...
    沈念sama閱讀 45,367評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡展运,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,581評論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了精刷。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片拗胜。...
    茶點故事閱讀 39,754評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖怒允,靈堂內(nèi)的尸體忽然破棺而出埂软,到底是詐尸還是另有隱情,我是刑警寧澤纫事,帶...
    沈念sama閱讀 35,458評論 5 344
  • 正文 年R本政府宣布勘畔,位于F島的核電站所灸,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏炫七。R本人自食惡果不足惜爬立,卻給世界環(huán)境...
    茶點故事閱讀 41,068評論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望万哪。 院中可真熱鬧侠驯,春花似錦、人聲如沸奕巍。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,692評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽伍绳。三九已至,卻和暖如春乍桂,著一層夾襖步出監(jiān)牢的瞬間冲杀,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,842評論 1 269
  • 我被黑心中介騙來泰國打工睹酌, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留权谁,地道東北人。 一個月前我還...
    沈念sama閱讀 47,797評論 2 369
  • 正文 我出身青樓憋沿,卻偏偏與公主長得像旺芽,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子辐啄,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,654評論 2 354

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