Spring Bootフレームワーク-Redisトピック

11800 ワード

一、Redisの概要
2008年、創業会社Merziaはパフォーマンスのボトルネックを解決するために初期版redisを開発し、その後redisは正式にオープンし、膨大なユーザー層を徐々に持っている.これまでredisの最新バージョンは5.0.7で、公式サイトのアドレスはhttps://redis.io/.
redisはデータの永続化をサポートし、メモリ内のデータをディスクに保存し、再起動時に再ロードして使用することができます.
redisは、単純なkey-valueタイプのデータだけでなく、list、set、zset、hashなどのデータ構造のストレージも提供します.
redisは、データのバックアップ、すなわちmaster-slaveモードのデータバックアップをサポートする、マスタスレーブ同期をサポートし、データはマスタサーバから任意の数のスレーブサーバに同期することができる.
二、JedisPoolConfig方式集積
JedisPoolConfigはredis 2から2.1リリースではサポートが開始され、使用方法は簡単ですが、非同期はサポートされていません.
1、依存を追加
  <dependency>
      <groupId>redis.clientsgroupId>
      <artifactId>jedisartifactId>
      <version>2.1.0version>
  dependency>

2、コード実現
    /**
     *      
     */
    @Bean
    public JedisPool createRedisPool() {
        JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
        jedisPoolConfig.setMaxActive(Integer.valueOf(maxActive));
        jedisPoolConfig.setMaxIdle(Integer.valueOf(maxIdle));
        jedisPoolConfig.setMaxWait(Integer.valueOf(maxWait));
        jedisPoolConfig.setTestOnBorrow(Boolean.valueOf(testOnBorrow));

        return new JedisPool(jedisPoolConfig, host, port, timeout, auth)
    }    

 
三、RedisTemplate方式集積
RedisTemplateはredis 2から.9バージョンからサポートを開始し、springboot統合、非同期をサポートします.
1、依存を追加
    <dependency>
        <groupId>org.springframework.bootgroupId>
        <artifactId>spring-boot-starter-data-redisartifactId>
    dependency>    

2、プロファイル
spring:
  redis:
    database: 0  			# Redis     (   0)
    host: 127.0.0.1 		        # Redis     
    port: 6379  			# Redis       
    password:   			# Redis       (    )
    pool:
      max-active: 8  		        #         (          )
      max-wait: -1  		        #            (          )
      max-idle: 8  			#            
      min-idle: 0  			#            
    timeout: 0  			#       (  )

3、コード実現
@Configuration
@EnableCaching
public class RedisConfig extends CachingConfigurerSupport {

    /**
     *   redis        
     * @param redisTemplate
     * @return
     */
    @Bean
    public CacheManager cacheManager(RedisTemplate redisTemplate) {
        RedisCacheManager rcm = new RedisCacheManager(redisTemplate);
        return rcm;
    }

    /**
     * retemplate    
     * @param factory
     * @return
     */
    @Bean
    public RedisTemplate redisTemplate(RedisConnectionFactory factory) {
        RedisTemplate template = new RedisTemplate<>();
        //       
        template.setConnectionFactory(factory);
        //  Jackson2JsonRedisSerializer         redis value (    JDK      )
        Jackson2JsonRedisSerializer jacksonSeial = new Jackson2JsonRedisSerializer(Object.class);
        ObjectMapper om = new ObjectMapper();
        //         ,field,get set,       ,ANY     private public
        om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
        //           ,     final   ,final    ,  String,Integer      
        om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
        jacksonSeial.setObjectMapper(om);

        //    json   
        template.setValueSerializer(jacksonSeial);
        //  StringRedisSerializer         redis key 
        template.setKeySerializer(new StringRedisSerializer());

        //   hash key  value     
        template.setHashKeySerializer(new StringRedisSerializer());
        template.setHashValueSerializer(jacksonSeial);
        template.afterPropertiesSet();

        return template;
    }

    /**
     *  hash       
     * @param redisTemplate
     * @return
     */
    @Bean
    public HashOperations hashOperations(RedisTemplate redisTemplate) {
        return redisTemplate.opsForHash();
    }

    /**
     *  redis         
     * @param redisTemplate
     * @return
     */
    @Bean
    public ValueOperations valueOperations(RedisTemplate redisTemplate) {
        return redisTemplate.opsForValue();
    }

    /**
     *           
     * @param redisTemplate
     * @return
     */
    @Bean
    public ListOperations listOperations(RedisTemplate redisTemplate) {
        return redisTemplate.opsForList();
    }

    /**
     *             
     * @param redisTemplate
     * @return
     */
    @Bean
    public SetOperations setOperations(RedisTemplate redisTemplate) {
        return redisTemplate.opsForSet();
    }

    /**
     *             
     * @param redisTemplate
     * @return
     */
    @Bean
    public ZSetOperations zSetOperations(RedisTemplate redisTemplate) {
        return redisTemplate.opsForZSet();
    }
}