springBoot - springsession integrada para usar redis para lograr el intercambio de sesiones

Gire: https://www.cnblogs.com/mengmeng89012/p/5519698.html

Esta vez traigo el tutorial de spring boot + redis para lograr el intercambio de sesiones.

 

En la documentación de inicio de Spring, díganos que agreguemos @EnableRedisHttpSession para habilitar el soporte de sesión de Spring, la configuración es la siguiente:

Código Java   Código favorito
  1. @Configuración  
  2. @EnableRedisHttpSession  
  3. clase pública  RedisSessionConfig {  
  4. }  

La anotación @EnableRedisHttpSession es proporcionada por spring-session-data-redis, así que agréguela al archivo pom.xml

Código Java   Código favorito
  1. <dependencia>  
  2.         <groupId> org.springframework.boot </groupId>  
  3.         <artifactId> spring-boot-starter-redis </artifactId>  
  4. </dependency>  
  5. <dependencia>  
  6.         <groupId> org.springframework.session </groupId>  
  7.         <artifactId> spring-session-data-redis </artifactId>  
  8. </dependency>  

 

 

A continuación, debe configurar la ubicación del servidor redis en application.properties. Aquí, usamos la máquina:

Código Java   Código favorito
  1. spring.redis.host = localhost  
  2. spring.redis.port = 6379  

De esta manera, se completa el arranque de primavera + redis más simple para lograr el intercambio de sesiones, la siguiente prueba.

 

Primero, iniciamos dos servicios tomcat, los puertos son 8080 y 9090, establecidos en application.properties [dirección de descarga]    :

Código Java   Código favorito
  1. server.port = 8080  

 

A continuación, defina un controlador: 

Código Java   Código favorito
  1. @RestController  
  2. @RequestMapping (value =  "/ admin / v1")  
  3. público  de clase {QuickRun  
  4.     @RequestMapping (value =  "/ first", method = RequestMethod.GET)  
  5.     public Map <String, Object> firstResp (solicitud HttpServletRequest) {  
  6.         Map <String, Object> map =  new HashMap <> ();  
  7.         request.getSession (). setAttribute ( "request Url", request.getRequestURL ());  
  8.         map.put ( "URL de solicitud", request.getRequestURL ());  
  9.         mapa de retorno;  
  10.     }  
  11.   
  12.     @RequestMapping (value =  "/ sessions", method = RequestMethod.GET)  
  13.     Sesiones de objetos públicos (solicitud HttpServletRequest) {  
  14.         Map <String, Object> map =  new HashMap <> ();  
  15.         map.put ( "sessionId", request.getSession (). getId ());  
  16.         map.put ( "mensaje", request.getSession (). getAttribute ( "mapa"));  
  17.         mapa de retorno;  
  18.     }  
  19. }  

 

Después del inicio de la prueba de acceso, primero visite el puerto tomcat 8080, regrese para  obtener [dirección de descarga]    :

Código Java   Código favorito
  1. { "URL de solicitud": "http: // localhost: 8080 / admin / v1 / first"}  

 A continuación, accedemos a las sesiones en el puerto 8080 y regresamos:

Código Java   Código favorito
  1. { "sessionId": "efcc85c0-9ad2-49a6-a38f-9004403776b5", "mensaje": "http: // localhost: 8080 / admin / v1 / first"}  

Finalmente, visite las sesiones en el puerto 9090 y regrese:

Código Java   Código favorito
  1. { "sessionId": "efcc85c0-9ad2-49a6-a38f-9004403776b5", "mensaje": "http: // localhost: 8080 / admin / v1 / first"}  

Se puede ver que los resultados devueltos por los dos servidores 8080 y 9090 son los mismos, compartiendo la sesión

 

Si accede al primer puerto 9090 en este momento, primero regrese:

Código Java   Código favorito
  1. { "URL de solicitud": "http: // localhost: 9090 / admin / v1 / first"}  

Se devuelven las sesiones de ambos servidores:

Código Java   Código favorito
  1. { "sessionId": "efcc85c0-9ad2-49a6-a38f-9004403776b5", "mensaje": "http: // localhost: 9090 / admin / v1 / first"}  

 

Es muy sencillo realizar sesiones compartidas a través de spring boot + redis, y también es muy útil. Con nginx para el equilibrio de carga, se pueden realizar aplicaciones distribuidas.






-------------------------------------------------- -----

Agregar caché

RedisCacheConfig
Código de copia
paquete com.lzw.core.configuration; 

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
importar org.springframework.cache.CacheManager;
import org.springframework.cache.annotation.CachingConfigurerSupport;
importar org.springframework.cache.annotation.EnableCaching;
import org.springframework.context.annotation.Bean;
importar org.springframework.context.annotation.Configuration;
importar org.springframework.data.redis.cache.RedisCacheManager;
importarorg.springframework.data.redis.connection.RedisConnectionFactory;
importar org.springframework.data.redis.core.RedisTemplate;
importar redis.clients.jedis.JedisPool;
importar redis.clients.jedis.JedisPoolConfig; 

import java.util.Map;
import java.util.concurrent.ConcurrentHashMap; 

/ ** 
 * Creado por ZhenWeiLai el 2017/6/11. 
 * / 
@Configuration 
@EnableCaching 
clase pública  RedisCacheConfig   extiende CachingConfigurerSupport { 
    Logger logger = LoggerFactory.getLogger (RedisCacheConfig. Class ); 
    @Valor("$ {spring.redis.host}" )
     host de cadena privado ; 

    @Value ( "$ {spring.redis.port}" )
     puerto int privado  ; 
    @Value ( "$ {spring.redis.timeout}" )
     privado int timeout; 
    @Value ( "$ {spring.redis.pool.max-idle}" )
     private int maxIdle; 
    @Value ( "$ {spring.redis.pool.max-wait}" )
     privado largo maxWaitMillis; 
    @Value ( "$ {spring.redis.password}" )
     contraseña de cadena privada ;
 
 
 



    JedisPool redisPoolFactory () { 
        logger.info ( "JedisPool 注入 成功 !!" ); 
        JedisPoolConfig jedisPoolConfig = new JedisPoolConfig (); 
        jedisPoolConfig.setMaxIdle (maxIdle); 
        jedisPoolConfig.setMaxWaitMillis (maxWaitMillis); 

        JedisPool jedisPool = nuevo JedisPool (jedisPoolConfig, host, puerto, tiempo de espera, contraseña); 

        volver jedisPool; 
    } 


    @Bean 
    public RedisTemplate <String, String> redisTemplate (RedisConnectionFactory cf) { 
        RedisTemplate <String, String> redisTemplate = new RedisTemplate <String, String>(); 
        RedisTemplate.setConnectionFactory (CF2); 
        retorno redisTemplate; 
    } 

    @Bean 
    pública la CacheManager CacheManager (RedisTemplate redisTemplate) { 
        RedisCacheManager CacheManager = nueva nueva RedisCacheManager (redisTemplate); 

        // tiempo predeterminado, en segundos 
        cacheManager.setDefaultExpiration (3000 );
         // Establezca el tiempo de espera de acuerdo con el nombre de la memoria caché, 0 significa que no hay tiempo de espera 
        Map <String, Long> expires = new ConcurrentHashMap <> (); 
        cacheManager.setExpires (expires); 

        return cacheManager; 
    } 
}
Código de copia

 application.yml

Código de copia
spring: 
  datasource: 
# readSize: 1 
# name: writeDataSource 
    type: com.alibaba.druid.pool.DruidDataSource 
    write: 
      driver-class-name: com.mysql.jdbc.Driver 
      url: jdbc: mysql: // localhost: 3306 / cloud? useUnicode = true & characterEncoding = UTF-8 & zeroDateTimeBehavior = convertToNull &TransformatedBitIsBoolean = true & useSSL = 
      nombre de usuario verdadero : 
      contraseña de root : 123 
      initialSize: 10 
      maxActive: 100 
      maxWait: 60000 
      minIdle: 5 
      timeBetweenEvictionRunsMillis: 60000 
      minTillMillis: 60000 
      validationQuery: SELECT 'x'
      testWhileIdle: true 
      testOnBorrow: false 
      testOnReturn: false 
      poolPreparedStatements: true 
      maxPoolPreparedStatementPerConnectionSize: 20 

  #redis configuration 
  redis: 
    host: 192.168.1.11 
    port: 6379 
    # REDIS (RedisProperties) 
    # Índice de la base de datos de Redis (el valor predeterminado es 0) 
    base de datos del 
    servidor Redis : 0 # contraseña de conexión del servidor Redis (El valor predeterminado es vacío) 
    contraseña: 
    # número máximo de conexiones en el grupo de conexiones (use un valor negativo para indicar que no hay límite) 
    # tiempo de espera de conexión (milisegundos) 
    tiempo de espera: 0 
    grupo: 
      max-active: 8 
      # tiempo de espera de bloqueo máximo del grupo de conexiones (use un valor negativo para indicar Sin límite) 
      max-wait: -1 
      # La conexión inactiva más grande en el 
      max-idle: 8
      # La conexión inactiva mínima en el grupo de conexiones 
      min-idle: 0

Publicado 7 artículos originales · 69 alabanzas · 200,000+ visitas

Supongo que te gusta

Origin blog.csdn.net/u014320421/article/details/79620811
Recomendado
Clasificación