Springboot統合redis格納セッション

16549 ワード

Springboot統合redis格納セッション
y maven依存に入る:

        
            org.springframework.boot
            spring-boot-starter-redis
        
        
        
            org.springframework.session
            spring-session-data-redis
        

SessionConfigの作成
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;
import org.springframework.session.data.redis.config.annotation.web.http.EnableRedisHttpSession;

//      redis      
//maxInactiveIntervalInSeconds SpringSession     (  : )


@Configuration @EnableRedisHttpSession(maxInactiveIntervalInSeconds = 1800) public class SessionConfig { // @Value("${redis.hostname:localhost}") String HostName; @Value("${redis.port:6379}") int Port; @Bean public JedisConnectionFactory connectionFactory() { JedisConnectionFactory connection = new JedisConnectionFactory(); connection.setPort(Port); connection.setHostName(HostName); return connection; } }

セッションの初期化
public class SessionInitializer extends AbstractHttpSessionApplicationInitializer{
    public SessionInitializer() {
        super(SessionConfig.class);
    }
}

コントローラレイヤコード
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.SpringApplication;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class SessionController {

    @Value("${server.port}")
    private String PORT;

    public static void main(String[] args) {
        SpringApplication.run(SessionController.class, args);
    }

    @RequestMapping("/index")
    public String index() {
        return "index:" + PORT;
    }

   // @methodDesc:     :( session   )
    
    @RequestMapping("/setSession")
    public String setSession(HttpServletRequest request, String sessionKey, String sessionValue) {
        HttpSession session = request.getSession(true);
        session.setAttribute(sessionKey, sessionValue);
        return "success,port:" + PORT;
    }

   // @methodDesc:     :( Session   )
    
    @RequestMapping("/getSession")
    public String getSession(HttpServletRequest request, String sessionKey) {
        HttpSession session =null;
        try {
         session = request.getSession(false);
        } catch (Exception e) {
          e.printStackTrace();
        }
        String value=null;
        if(session!=null){
            value = (String) session.getAttribute(sessionKey);
        }
        return "sessionValue:" + value + ",port:" + PORT;
    }

}

プロファイル
#redis  
# Redis     (   0)
spring.redis.database=0
# Redis     
spring.redis.host=localhost
# Redis       
spring.redis.port=6379
#Redis  
spring.redis.password=redis  
#         (          )
spring.redis.pool.max-active=8
#            (          )
spring.redis.pool.max-wait=-1
#            
spring.redis.pool.max-idle=8
#            
spring.redis.pool.min-idle=0
#       (  )
spring.redis.timeout=0
#springboot  tomcat     
server.port=8080

redisは、次のように構成することもできます.
@Configuration
@EnableCaching//      
//maxInactiveIntervalInSeconds:session       ,   1800   ,       60 
@EnableRedisHttpSession(maxInactiveIntervalInSeconds = 60)//  ,  redis  session  
public class RedisConfig {
    //   redisTemplate        
    //   String-String
    //    @Bean
    public RedisTemplate RedisTemplate(RedisConnectionFactory factory) {
        StringRedisTemplate stringRedisTemplate = new StringRedisTemplate();
        stringRedisTemplate.setConnectionFactory(factory);
        return stringRedisTemplate;
    }

    @Bean
    public RedisTemplate RedisTemplate2(RedisConnectionFactory factory) {
        RedisTemplate template = new RedisTemplate();
        template.setConnectionFactory(factory);
        template.setKeySerializer(new StringRedisSerializer());
        //GenericJackson2JsonRedisSerializer      ,redis      json
        template.setValueSerializer(new GenericJackson2JsonRedisSerializer());
        template.setHashKeySerializer(new GenericJackson2JsonRedisSerializer());
        template.setHashValueSerializer(new GenericJackson2JsonRedisSerializer());
        template.afterPropertiesSet();
        return template;
    }
    @Bean
    public RedisTemplate RedisTemplate3(RedisConnectionFactory factory) {
        RedisTemplate template = new RedisTemplate<>();
        template.setConnectionFactory(factory);
        //  Jackson2JsonRedisSerializer         redis value (    JDK      )
        Jackson2JsonRedisSerializer serializer = new Jackson2JsonRedisSerializer(Object.class);

        ObjectMapper mapper = new ObjectMapper();
        mapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
        mapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
        serializer.setObjectMapper(mapper);
        //  StringRedisSerializer         redis key 
        template.setKeySerializer(new StringRedisSerializer());
        //  Jackson2JsonRedisSerializer         redis value (    JDK      )
        template.setValueSerializer(serializer);
        //   hash key  value     
        template.setHashKeySerializer(new StringRedisSerializer());
        template.setHashValueSerializer(serializer);
        template.afterPropertiesSet();
        return template;
    }
    /**
     * redis    
     * @param redisTemplate
     * @return
     */
    @Bean
    public CacheManager cacheManager(RedisTemplate  redisTemplate) {
        RedisCacheManager rcm = new RedisCacheManager(redisTemplate);
        //        ,        
        rcm.setCacheNames(Arrays.asList("user"));
        //        ( )
        rcm.setDefaultExpiration(60);
        return rcm;
    }

    /**
     *  springboot   spring-session   ,
     *             cookie    session     
     * @return
     */
    @Bean
    public CookieSerializer cookieSerializer() {
        DefaultCookieSerializer defaultCookieSerializer = new DefaultCookieSerializer();
        //cookie  
        defaultCookieSerializer.setCookieName("sessionId");
        //       
        //defaultCookieSerializer.setDomainName("xxx.com");
        //   web     cookiePath  
        defaultCookieSerializer.setCookiePath("/");
        return defaultCookieSerializer;
    }
}

クラスタ構成:
 spring:  
   redis:  
     cluster:  
       nodes:  
        - Centos6701:6379  
        - Centos6701:6380
        - Centos6702:6380
        - Centos6702:6379 
        - Centos6703:6379 
        - Centos6703:6380

 
高同時性ソリューション
ビジネス・データベース-』データ水平分割(パーティション・テーブル・ライブラリ)、読み書き分離
ビジネスアプリケーション-』論理コード最適化(アルゴリズム最適化)、共通データキャッシュ
アプリケーションサーバ-』逆静的エージェント、構成最適化、負荷等化(apache配布、マルチtomcatインスタンス)
システム環境-』JVMチューニング
ページ最適化-』ページ接続数を減らし、ページサイズを痩せる
1、動的資源と静的資源の分離;
2、CDN;
3、負荷バランス;
4、分散キャッシュ;
5、データベースの読み書き分離或いはデータの切り分け(垂直或いは水平);
6、サービス分散配置.
 
posted @
2019-02-20 13:03に着手したプログラマーが読む(
...) コメント(
...) コレクションの編集