Search code examples
springspring-bootcachingredis

Clear Redis Cache on Spring Boot Application Startup


On application (spring boot service) startup, need to clear the Redis cache.

Redis is running in a different docker container with own volume mapping. Since it retains the old cache, the application picks the data from Redis cache instead of Database even after the application restarts

  • Tried @EventListener for ContextRefreshedEvent and it is never getting called.
  • Tried with @PostConstruct in ApplicationMain class, but it doesn't clear the cache.
  • Tried using @CacheEvict(allEntries = true), but still no luck

    @Component public class ApplicationStartUp {

    @Autowired
    private CacheManager cacheManager;
    
    @EventListener()
    public void onApplicationEvent(ContextStartedEvent event) {
        cacheManager.getCacheNames()
                    .parallelStream()
                    .forEach(n -> cacheManager.getCache(n).clear());
    }
    

    }


Solution

  • I was successfully able to clear the cache with ApplicationReadyEvent. As the CacheManager bean is available by the time, the cache is getting cleared properly on startup

    @Autowired
    private CacheManager cacheManager;
    
    @EventListener
    public void onApplicationEvent(ApplicationReadyEvent event) {
        cacheManager.getCacheNames()
                    .parallelStream()
                    .forEach(n -> cacheManager.getCache(n).clear());
    }