SpringBoot(九):redisキャッシュデータとsession

7034 ワード

著作権声明
本作は知識共有署名4.0国際ライセンス契約を使用して許可されている.本文の作者:控えめなパンダの文章のリンク:https://aodeng.cc/archives/springbootjiu転載声明:自由転載-非商用-非派生-署名を保持し、非商業転載は著者と出典を明記してください.商業転載は著者本人に連絡してください.
単純な広告
個人ブログ:https://aodeng.cc微信公众号:低调レッサーパンダqq交流群:756796932
コンフィギュレーション
pom.xml

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

application.yml
# REDIS (RedisProperties)
# Redis     (   0)
spring:
  redis:
      database: 0
  # Redis     
      host: localhost
# Redis       
      port: 6379
# Redis       (    )
      password:
#       (  )
      #timeout: 0
  #         (          )
  pool:
    max-active: 8
  #            (          )
    max-wait: -1
  #            
    max-idle: 8
  #            
    min-idle: 0

RedisConfig.java
@Configuration
@EnableCaching
public class RedisConfig extends CachingConfigurerSupport {

    @Bean
    public KeyGenerator keyGenerator() {
        return new KeyGenerator() {
            @Override
            public Object generate(Object target, Method method, Object... params) {
                StringBuilder sb = new StringBuilder();
                sb.append(target.getClass().getName());
                sb.append(method.getName());
                for (Object object : params) {
                    sb.append(object.toString());
                }
                return sb.toString();
            }
        };
    }

    /***
     * springboot 2.0
     * @param connectionFactory
     * @return
     */
    @Bean
    CacheManager cacheManager(RedisConnectionFactory connectionFactory) {
        //user      
        RedisCacheConfiguration userCacheConfiguration = RedisCacheConfiguration.defaultCacheConfig().entryTtl(Duration.ofMinutes(30)).disableCachingNullValues().prefixKeysWith("role");
        //product      
        RedisCacheConfiguration productCacheConfiguration = RedisCacheConfiguration.defaultCacheConfig().entryTtl(Duration.ofMinutes(10)).disableCachingNullValues().prefixKeysWith("test");
        Map redisCacheConfigurationMap = new HashMap<>();
        redisCacheConfigurationMap.put("role", userCacheConfiguration);
        redisCacheConfigurationMap.put("test", productCacheConfiguration);
        //     RedisCacheWriter
        RedisCacheWriter redisCacheWriter = RedisCacheWriter.nonLockingRedisCacheWriter(connectionFactory);


        //  CacheManager        JdkSerializationRedisSerializer,   RedisCacheConfiguration      StringRedisSerializer   key,JdkSerializationRedisSerializer   value,             
        //ClassLoader loader = this.getClass().getClassLoader();
        //JdkSerializationRedisSerializer jdkSerializer = new JdkSerializationRedisSerializer(loader);
        //RedisSerializationContext.SerializationPair pair = RedisSerializationContext.SerializationPair.fromSerializer(jdkSerializer);
        //RedisCacheConfiguration defaultCacheConfig=RedisCacheConfiguration.defaultCacheConfig().serializeValuesWith(pair);


        RedisCacheConfiguration defaultCacheConfig = RedisCacheConfiguration.defaultCacheConfig();
        //          30 
        defaultCacheConfig.entryTtl(Duration.ofSeconds(30));
        //   RedisCacheManager
        RedisCacheManager cacheManager = new RedisCacheManager(redisCacheWriter, defaultCacheConfig, redisCacheConfigurationMap);
        return cacheManager;
    }
    @Bean
    public RedisTemplate redisTemplate(RedisConnectionFactory factory) {
        StringRedisTemplate template = new StringRedisTemplate(factory);
        Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
        ObjectMapper om = new ObjectMapper();
        om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
        om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
        jackson2JsonRedisSerializer.setObjectMapper(om);
        template.setValueSerializer(jackson2JsonRedisSerializer);
        template.afterPropertiesSet();
        return template;
    }

SessionConfig.java
@Configuration
@EnableRedisHttpSession(maxInactiveIntervalInSeconds = 1)
public class SessionConfig {
}

キャッシュの使用
@RunWith(SpringRunner.class)
@SpringBootTest
public class TestRedisTest {
    private static final Logger log= LoggerFactory.getLogger(TestRedisTest.class);
    @Autowired
    private StringRedisTemplate stringRedisTemplate;
    @Autowired
    private RedisTemplate redisTemplate;

    @Test//StringRedisTemplate     StringRedisSerializer
    public void test1() throws Exception{
        stringRedisTemplate.opsForValue().set("name","admin");
        Assert.assertEquals("admin",stringRedisTemplate.opsForValue().get("name"));
        log.info("[redis  ]-[{}]",stringRedisTemplate.opsForValue().get("name"));
    }
    @Test//RedisTemplate     JdkSerializationRedisSerializer
    public void test2() throws Exception{
        SysRole sysRole=new SysRole();
        sysRole.setRoleId(1);
        sysRole.setRole("1001");
        sysRole.setRole("   ");
        sysRole.setDescription("         ");
        ValueOperations valueOperations=redisTemplate.opsForValue();
        valueOperations.set("sysRole1",sysRole);
        valueOperations.set("sysRole2",sysRole,2, TimeUnit.SECONDS);
        Thread.sleep(1000);
        log.info("[sysRole2]-[{}]",valueOperations.get("sysRole2"));
        boolean exists=redisTemplate.hasKey("sysRole2");
        if(exists){
            System.out.println("true");
        }else {
            System.out.println("false");
        }
        Assert.assertEquals("   ",valueOperations.get("sysRole1").getRole());
    }
}

セッション共有demo
@RestController
public class TestRedis {

    @RequestMapping("/test")
    String test(HttpSession httpSession){
        UUID uuid=(UUID) httpSession.getAttribute("uuid");
        if(null==uuid){
            uuid=UUID.randomUUID();
        }
        httpSession.setAttribute("uuid",uuid);
        return httpSession.getId();
    }
}

redisクライアントセッションの表示
keys '*sessions*'

ソースアドレス
https://github.com/java-aodeng/hope