SSM与Shiro、Redis集成实现分布式session管理(一)—— 环境搭建

对于分布式系统来说,分布式session是首先要解决的问题,业界目前的解决方式大概可以归纳为三种(转自http://www.cnblogs.com/cxrz/p/8529587.html)

一、Session Replication 方式管理 (即session复制)

        简介:将一台机器上的Session数据广播复制到集群中其余机器上

        使用场景:机器较少,网络流量较小

        优点:实现简单、配置较少、当网络中有机器Down掉时不影响用户访问

        缺点:广播式复制到其余机器有一定廷时,带来一定网络开销

二、Session Sticky 方式管理

        简介:即粘性Session、当用户访问集群中某台机器后,强制指定后续所有请求均落到此机器上

       使用场景:机器数适中、对稳定性要求不是非常苛刻

       优点:实现简单、配置方便、没有额外网络开销

        缺点:网络中有机器Down掉时、用户Session会丢失、容易造成单点故障

三、缓存集中式管理

       简介:将Session存入分布式缓存集群中的某台机器上,当用户访问不同节点时先从缓存中拿Session信息

       使用场景:集群中机器数多、网络环境复杂

       优点:可靠性好

       缺点:实现复杂、稳定性依赖于缓存的稳定性、Session信息放入缓存时要有合理的策略写入

      

      第二种方式可以使用nginx的ip_hash功能来实现,很简单。今天笔者带着大家来实现基于shiro与redis的分布式session管理。

      一、首先是搭建ssm、shiro、redis的框架

      pom文件依赖如下:


  
  
    org.springframework
    spring-context
    5.0.0.RELEASE
  
  
    org.springframework
    spring-core
    5.0.0.RELEASE
  
  
    org.springframework
    spring-beans
    5.0.0.RELEASE
  
  
    org.springframework
    spring-web
    5.0.0.RELEASE
  
  
    org.springframework
    spring-webmvc
    5.0.0.RELEASE
  
  
    org.springframework
    spring-aop
    5.0.0.RELEASE
  
  
    org.springframework
    spring-tx
    5.0.0.RELEASE
  
  
    org.springframework
    spring-jdbc
    5.0.0.RELEASE
  


  
  
    org.mybatis
    mybatis
    3.4.5
  

  
    org.mybatis
    mybatis-spring
    1.3.1
  


  
  
    org.apache.shiro
    shiro-core
    1.3.2
  
  
    org.apache.shiro
    shiro-spring
    1.3.2
  

  
    mysql
    mysql-connector-java
    5.1.30
  
  
    com.alibaba
    druid
    1.0.14
  

  
  
    javax.servlet
    jsp-api
    2.0
    provided
  

  
  
    javax.servlet
    jstl
    1.2
  

  
  
    commons-fileupload
    commons-fileupload
    1.3.2
  

  
  
      commons-lang
      commons-lang
      2.6
  

  
  
    junit
    junit
    4.12
    test
  

  
  
      org.springframework.data
      spring-data-redis
      1.6.1.RELEASE
  
  
      redis.clients
      jedis
      2.7.3
  

  
        org.slf4j
        slf4j-api
        1.7.21
  

  
        org.slf4j
        slf4j-log4j12
        1.7.21
  

  
  
      com.alibaba
      fastjson
      1.1.26
  

  
  
      commons-beanutils
      commons-beanutils
      1.8.0
  
  
   
       com.fasterxml.jackson.core
       jackson-databind
       2.9.4
   

   
       com.fasterxml.jackson.core
       jackson-annotations
       2.9.4
   
   
       com.fasterxml.jackson.core
       jackson-core
       2.9.4
   

spring的配置文件:

spring-core.xml:



   
   

spring-mybatis.xml




        

        
        

        
            
            
            
            

            
            
            
            
            
            
            
            
            

        
    
        
            
            
        

        
        
            
            
        

        
        
            
        

spring-redis.xml




      
      

      

      
      
          
          
          
          
          
      

      
      
          
          
          
          
      

      
          
            
            
            
          
      

      
          
      

 

spring-mvc.xml




    
    

   
   

   
   
       
   

    
    
        
        
        
    

    
    
        
        
        
        
        
        
    

配置文件:

jdbc.jdbcDriver=com.mysql.jdbc.Driver
jdbc.jdbcUrl=jdbc:mysql://localhost:3306/XXXXXX
jdbc.jdbcUsername=root
jdbc.jdbcPassword=root
jdbc.initialSize=10
jdbc.minIdle=6
jdbc.maxActive=50
jdbc.maxWait=60000
jdbc.timeBetweenEvictionRunsMillis=60000
redis.maxIdle=300
redis.minIdle=100
redis.maxWaitMillis=3000
redis.testOnBorrow=true
redis.maxTotal=500
redis.host=127.0.0.1
redis.port=6379
redis.password=123abc
log4j.rootLogger=INFO,Console,File  
log4j.appender.Console=org.apache.log4j.ConsoleAppender  
log4j.appender.Console.Target=System.out  
log4j.appender.Console.layout = org.apache.log4j.PatternLayout  
log4j.appender.Console.layout.ConversionPattern=[%c] - %m%n  

log4j.appender.File = org.apache.log4j.RollingFileAppender  
log4j.appender.File.File = logs/ssm.log  
log4j.appender.File.MaxFileSize = 10MB  
log4j.appender.File.Threshold = ALL  
log4j.appender.File.layout = org.apache.log4j.PatternLayout  
log4j.appender.File.layout.ConversionPattern =[%p] [%d{yyyy-MM-dd HH\:mm\:ss}][%c]%m%n 

web.xml




    
    
        contextConfigLocation
        classpath:spring-core.xml
    

    
    
        encodingFilter
        org.springframework.web.filter.CharacterEncodingFilter
        
            encoding
            UTF-8
        
    
    
        encodingFilter
        /*
    

    
    
        org.springframework.web.context.ContextLoaderListener
    
    
    
        org.springframework.web.util.IntrospectorCleanupListener
    

    
    
        SpringMVC
        org.springframework.web.servlet.DispatcherServlet
        
            contextConfigLocation
            classpath:spring-mvc.xml
        
        1
    
    
        SpringMVC
        /
    

    
    
        shiroFilter
        org.springframework.web.filter.DelegatingFilterProxy
        
            targetFilterLifecycle
            true
        
    

    
        shiroFilter
        /*
        REQUEST
        FORWARD
        INCLUDE
        ERROR
    

    
        /WEB-INF/index.jsp
    


(二)——shiro集成 https://blog.csdn.net/money9sun/article/details/86604900

 

你可能感兴趣的:(JAVA,IT不归撸,SSM,shiro,redis,session,分布式)