美文网首页
Spring+nginx+redis集群

Spring+nginx+redis集群

作者: 东门吹牛 | 来源:发表于2017-02-04 11:27 被阅读0次

在Web项目开发中,会话管理是一个很重要的部分,用于存储与用户相关的数据。通常是由符合session规范的容器来负责存储管理,也就是一旦容器关闭,重启会导致会话失效。因此打造一个高可用性的系统,必须将session管理从容器中独立出来。
  本文要说的spring-session,可以理解是替换了Servlet那一套会话管理,既不依赖容器,又不需要改动代码,并且是用了spring-data-redis那一套连接池,可以说是最完美的解决方案。当然,前提是项目要使用Spring Framework才行。

项目部分设置我们可以分三步走:

一、以下是所需要的基本的类库包(红色圈选的是spring-session及连接redis的基础库):

Paste_Image.png
也可以用maven进行类库的下载及管理,如下:
<dependency>
    <groupId>org.springframework.data</groupId>
    <artifactId>spring-data-redis</artifactId>
    <version>1.5.2.RELEASE</version>
</dependency>
<dependency>
    <groupId>org.springframework.session</groupId>
    <artifactId>spring-session</artifactId>
    <version>1.0.2.RELEASE</version>
</dependency>

二、接下来是在【spring-mvc.xml】中加入redis连接配置以及spring-session与redis交互配置, 如下图:

Paste_Image.png
代码明细
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:p="http://www.springframework.org/schema/p"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
    http://www.springframework.org/schema/beans/spring-beans.xsd
    http://www.springframework.org/schema/context
    http://www.springframework.org/schema/context/spring-context.xsd
    http://www.springframework.org/schema/mvc
    http://www.springframework.org/schema/mvc/spring-mvc.xsd">
       
<!-- 设置使用注解的类所在的jar包 -->  
    <context:component-scan base-package="com.pubinfo.wechat" />  
<!-- 开启注解 -->
    <mvc:annotation-driven />
     
    
<!-- 对转向页面的路径解析。prefix:前缀, suffix:后缀 -->    
    <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">  
        <property name="prefix" value="/WEB-INF/jsp/"></property>  
        <property name="suffix" value=".jsp"></property>  
    </bean>  


    <!-- redis -->
    <bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
    </bean>
     
    <bean id="jedisConnectionFactory"
        class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">
        <property name="hostName" value="192.168.66.101" /><!--192.168.66.101是包含在redis配置bind属性中 -->
        <property name="port" value="6379" />
        <property name="password" value="" />
        <property name="timeout" value="60" />
        <property name="poolConfig" ref="jedisPoolConfig" />
        <property name="usePool" value="true" />
    </bean>
     
    <bean id="redisTemplate" class="org.springframework.data.redis.core.StringRedisTemplate">
        <property name="connectionFactory" ref="jedisConnectionFactory" />
    </bean>
     
    <!-- 将session放入redis -->
    <bean id="redisHttpSessionConfiguration"
    class="org.springframework.session.data.redis.config.annotation.web.http.RedisHttpSessionConfiguration">
        <property name="maxInactiveIntervalInSeconds" value="1800" />
    </bean>
</beans>

三、最后是在【web.xml】中加入spring-session的过滤器, 如下图:

Paste_Image.png
代码明细
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" 
    xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
    http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
  
  <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>
   
  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath*:config/spring-*.xml</param-value>
  </context-param>
  
  <servlet>
        <servlet-name>springmvc</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
        <init-param>
        <param-name>contextConfigLocation</param-name>
            <param-value>classpath*:config/spring-mvc.xml</param-value> 
        </init-param>
  </servlet>
    
  <servlet-mapping>
        <servlet-name>springmvc</servlet-name>
        <url-pattern>/</url-pattern>
  </servlet-mapping>
    
  <listener>
    <listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class>
  </listener>

  <listener>
    <listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
  </listener>   
   
  <filter>
    <filter-name>characterEncodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
        <param-name>encoding</param-name>
        <param-value>utf-8</param-value>
    </init-param>
  </filter>
    
  <filter-mapping>
        <filter-name>characterEncodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
   </filter-mapping>
   

<!-- spring session -->
<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>
    
  <error-page>
    <error-code>404</error-code>
    <location>/error.jsp</location>
  </error-page>
  <error-page>
    <error-code>500</error-code>
    <location>/error.jsp</location>
  </error-page>
  
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
     
</web-app>


nginx安装及配置

我们选用【nginx-1.10.2.zip】压缩包进行解压即可使用nginx。

Paste_Image.png Paste_Image.png

上面两个图是对nginx的集群配置的讲解;接下来为了方便,我们把nginx注册为(window系统)系统服务:

Paste_Image.png Paste_Image.png Paste_Image.png
要注意的是:创建服务时一定要用管理权限,cd到ng_srvinst目录下,运行ng_srvinst.bat install命令即可,如要删除此删除运行ng_srvinst.bat remove。

redis安装及配置

我们选用【Redis-x64-3.2.100.zip】压缩包进行解压即可使用redis。需要注意的是,spring-session要求Redis Server版本不低于2.8。
解压后,我们需要修改redis的配置文件【redis.windows-service.conf】,允许局域网内访问,如下图:

Paste_Image.png

接下来为了方便,我们把redis注册为(window系统)系统服务,找到redis安装目录的【Windows Service Documentation.docx】文件即可,如下图:

Paste_Image.png
如上图用,管理员权限cd到Redis目录下,打入命令:
redis-server --service-install redis.windows-service.conf --service-name redis
回车后即可在系统服务中,找到redis Paste_Image.png

总结:与tomcat7+nginx+redis集群的区别是,spring方式集群不要求tomcat的版本及jdk/jre的版本。但要求Redis Server版本不低于2.8且使用spring mvc框架。

相关文章

网友评论

      本文标题:Spring+nginx+redis集群

      本文链接:https://www.haomeiwen.com/subject/ebsjittx.html