当前位置: 首页 > 知识库问答 >
问题:

在Spring Boot应用程序启动时清除Redis缓存

孔鸿宝
2023-03-14

在应用程序(Spring引导服务)启动时,需要清除Redis缓存。

Redis运行在另一个docker容器中,该容器具有自己的卷映射。因为它保留了旧的缓存,所以即使在应用程序重新启动后,应用程序也会从Redis缓存而不是数据库中拾取数据

>

  • 尝试了@EventListenerContextReFreshedEvents,但它从未被调用。
  • 在Application ationMain类中尝试了@PostConstruct,但是它没有清除缓存。
  • 尝试使用@CacheEvector(allEntry=true),但仍然没有运气

    @组件公共类应用程序启动{

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

    }

  • 共有2个答案

    华和悦
    2023-03-14

    对于Redis缓存管理器,如果想在引导时清除缓存,我认为需要使用一组名称初始化缓存管理器。请参阅RedisCacheManagerBuilder文档

    例如:

    RedisCacheManagerBuilder.fromConnectionFactory(redisConnectionFactory)
                            .initialCacheNames(Set.of("cacheOne", "cacheTwo"))
                            .build();
    

    例如,您应该能够在缓存配置类中使用@PostConstruct

    @PostConstruct
    public void clearCache() {
        cacheManager.getCacheNames()
                    .parallelStream()
                    .forEach(n -> cacheManager.getCache(n).clear());
    }
    
    卢鸿博
    2023-03-14

    我成功地清除了缓存与应用程序准备事件。当CacheManagerbean可用时,缓存在启动时被正确清除

    @Autowired
    private CacheManager cacheManager;
    
    @EventListener
    public void onApplicationEvent(ApplicationReadyEvent event) {
        cacheManager.getCacheNames()
                    .parallelStream()
                    .forEach(n -> cacheManager.getCache(n).clear());
    }
    
     类似资料:
    • 我正在使用Spring Boot 2.3,并使用默认缓存机制使用app.properties.我定义了所有值: 例如,我利用了Spring存储库中的缓存: 它按预期工作。然而,Redis是我的几个应用程序中使用的集群,我需要第二个应用程序能够删除Redis中的一些/所有键。 应用程序A1利用缓存并将密钥放在里面。应用程序A2,需要清除部分密钥或所有密钥。 在A2中,我做到了: 但是当然,缓存名称列

    • 更新我的Android应用程序的www文件夹(使用Cordova 3.6.3)时,该应用程序会显示我的www的旧缓存版本。 如果我清除应用程序数据(来自Android- 当应用程序更新时(或每次应用程序启动时),如何强制应用程序清除缓存?

    • 问题内容: 我想编写一个实用程序,用户可以在其中选择一组已安装的应用程序并清除其数据缓存,例如,您可以使用内置的“设置”->“应用程序”设置屏幕中的“清除缓存”按钮来手动执行此操作。 如何访问每个应用程序具有多少缓存数据并以编程方式清除这些缓存? 问题答案: 普通的SDK应用程序无权访问(更不用说修改)其他应用程序的缓存了,甚至无权修改您的文件。 在具有以root用户身份运行的应用程序的有根电话上

    • 我在stackoverflow上发现了类似的问题,并试图用这种方式(LINK)解决这个问题,但在我的项目中没有起作用。谁能给我一些建议吗? pom.xml 应用属性

    • 您好,我已经在codova开发了一个带有ionic framework的移动应用程序。我已经构建了这个应用程序,并开始在android mobile上进行测试。注销时,单击“我已在后面添加此代码”: 但在手机测试时间,当我注销时 我的控制器代码: 我的注销代码: 我访问数据的身份是: