Thursday, June 16, 2016

GenericJackson2JsonRedisSerializer Configuration - Spring Boot Example


Add spring-boot-starter-redis dependency to your pom file:

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-redis</artifactId>
</dependency> 

Set Redis config in application.yml:

spring:
  redis:
    host: localhost
    port: 6379

Set Redis Template, Cache Manager and @EnableCaching:

@SpringBootApplication
@EnableCaching
public class SpringBootApplication {

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

  @Bean
  public RedisTemplate redisTemplate(RedisConnectionFactory jedisConnFactory) {
    RedisTemplate redisTemplate = new RedisTemplate();
    redisTemplate.setConnectionFactory(jedisConnFactory);
    redisTemplate.setKeySerializer(new StringRedisSerializer());
    redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());
    return redisTemplate;
  }

  @Bean
  public CacheManager cacheManager(RedisTemplate redisTemplate) {
    RedisCacheManager redisCacheManager = new RedisCacheManager(redisTemplate);

    redisCacheManager.setUsePrefix(true);

    Collection cacheNames = new ArrayList<>();

    cacheNames.add("user-accounts-cache");

    redisCacheManager.setCacheNames(cacheNames);

    Map expires = new HashMap<>();

    expires.put("accounts-cache", 30L);

    redisCacheManager.setExpires(expires);

    return redisCacheManager;
  }
}

Decorate method for caching;

@Cacheable(value = "user-accounts-cache")
public List getUserAccounts(String userId) {
         return accountDao.getAccounts(userId);
}


2 comments:

  1. how do you implemented the set and get

    ReplyDelete
  2. This way:

    @Cacheable(value = "user-accounts-cache")
    public List getUserAccounts(String userId) {
    return accountDao.getAccounts(userId);
    }

    ReplyDelete