Springboot Redis


Springboot Redisセッションクラスタ


REDISを使用したセッションクラスタの構成図
  • Webサーバでよく使用される負荷分散クラスタ構成.通常、クライアントは、Webサーバにアクセスする際、Webサーバに直接アクセスするのではなく、負荷バランサL 4デバイスを介してVIPに接続し、各サーバに負荷をバランシングする.
  • server 1でセッションを使用する場合は、server 2と同期する必要があります.このためには、セッションクラスタを行い、それに応じてReddisを必要なリポジトリに使用する必要があります.
  • セッションクラスタは、物理的に分離されたが論理的に統一されたセッションであり、同じセッションを使用してサービス内のセッションを管理します.
  • Redisインストールとサービス登録


    https://github.com/microsoftarchive/redis/releasesこのリンクからzipファイルを受信し、自分の設定に従ってconfファイルを変更し、サービスとして登録してから開始すればよい.
    デフォルトのポートは6379です.設定情報(ポートを含む)を変更するには、リダイレクトします.windows.confファイルを変更すればいいです.
    サービスを登録し、redisサービスを開始します.
    redis-server --service-install redis.windows.conf --loglevel verbose
    redis-server --service-start
    CLIに接続し、接続が正常であることを確認します(springrootでredisが設定されていないため、何もありません)
    redis-cli
    127.0.0.1:6379>
    127.0.0.1:6379> keys *
    (empty list or set)
  • flushall:すべてのセッション情報
  • を初期化
  • キー*:すべてのセッション情報を表示する
  • get「key」:鍵のセッション情報を問い合わせる
  • build.勾配の設定

  • redisセッションを使用してデジタルコピー
  • を追加compile('org.springframework.session:spring-session-data-redis )

    @EnableRedishttpSessionの設定

  • maxInactiveIntervalInSecondsは、セッションの有効期限を秒単位で表します.Redisに格納される時間はミリ秒単位です.次のコードは60秒なので、60000ミリ秒です.
  • @Configuration
    @EnableRedisHttpSession(maxInactiveIntervalInSeconds = 60)
    public class RedisHttpSessionConfiguration extends AbstractHttpSessionApplicationInitializer {
    	
        public RedisHttpSesfgsionConfiguration(){
        	super(RedisHttpSessionConfiguration.class);
        }
        
        @Value("${spring.redis.host}")
        private String host;
        
        @Value("${spring.redis.port}")
        private Integer port;
        
        @Value("${spring.redis.password}")
        private String password;
        
        @Autowired
        private ObjectMapper mapper;
        
        @Bean
        public RedisConnectionFactory lettuceConnectionFactory(){
        	RedisStandaloneConfiguration standaloneConfiguration = new RedisStandaloneConfiguration(host, port);
            standaloneConfiguration.setPassword(password.isEmpty() ? RedisPassword.none() : RedisPassword.of(password));
            return new LettuceConnectionFactory(standaloneConfiguration);
        }
        
        @Bean
        public RedisTemplate<String, Object> redisTemplate(){
        	RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
            redisTemplate.setConnectionFactory(lettuceConnectionFactory());
            redisTemplate.setEnableTransactionSupport(true);
            
            redisTemplate.setKeySerializer(new StringRedisSerializer());
            redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer(mapper));
            
            redisTemplate.afterPropertiesSet();
            
            return redisTemplate;
        }
        
        
    }

    登録

    spring:
    	redis:
        	host: localhost
            port: 6379
            password: ''
        session:
        	store-type: redis
            redis:
            	flush-mode: on_save

    春季準備セッション時間の概要

  • スプリングを使用してセッションを準備する場合は、セッションデータを準備セッションに保存します.
  • セッションの有効期限が30分(1800秒)に設定されている場合、セッションの有効期限キー(spring:session:session:session:expires:{session-id})の有効期限は180000ミリ秒に設定されます.
  • 30分(1800秒)+5分(300秒)=210000ミリ秒セッションキー(spring:session:session:{session-id})の有効期限が設定されています.
  • セッションの有効期限に差があるのは、セッションの有効期限キー値を設定してから30分以内にセッションを削除する場合でも、セッションの詳細が必要であるためです.これで5分の余分な時間が増えた.
  • (アプリケーションで設定された有効期限)は、Redisセッションの有効期限鍵の有効期限を示す:アプリケーションは、この値を使用してセッション
  • が存在するかどうかを確認する.
  • (アプリケーション設定の有効期限+5分)は、Redisセッション鍵の有効期限
  • である.