代码之家  ›  专栏  ›  技术社区  ›  prisesh

地图的春季缓存退出

  •  1
  • prisesh  · 技术社区  · 7 年前

        @Override
        @Cacheable(value = { "timeCache" })
        public Map<String, RechargeMatrix> getValues() {
             .....
        }
    

    它有58个值,正在成功缓存。 现在我想逐出这个缓存中的一个值。哪一个

        @Override
        @CacheEvict(value = "timeCache", key = "#key")
        public void clearCache(String key) {
            LOG.debug("Clearing cache"); 
        }
    

    以上代码未清除缓存值。。我觉得我必须为逐出特定值提供入口键值。但是说clearCache(“12345”);将不起作用,因为它正在查找字符串值而不是键值。。
    但是不要不知道如何在钥匙上让步。。 有线索吗?

    thanks in advance
    
    1 回复  |  直到 7 年前
        1
  •  1
  •   SaÅ¡a    7 年前

    您可以做的是清除并立即重新缓存您的 时间缓存 e、 g.您的 clearCache

    @CacheEvict(value = "timeCache", allEntries = true, beforeInvocation = true)
    @Cacheable("timeCache")
    public Map<String, RechargeMatrix> clearAndRecache() {
        // retrieve your timeCache values as in getValues() method
    }
    

    您可以在示例项目中查看这一点 here . 本示例基于 Memcached Spring Boot library .

    如果你需要 钥匙 参数如中所示 clearCache(字符串键) 要删除数据库中的数据,代码应该如下所示:

    @CacheEvict(value = "timeCache", allEntries = true, beforeInvocation = true)
    @Cacheable(value = "timeCache", key = "T(org.springframework.cache.interceptor.SimpleKey).EMPTY")
    public Map<String, RechargeMatrix> deleteAndRecache(String key) {
        // 1. delete data in DB by key parameter 
        // 2. retrieve your timeCache values as in getValues() method and return it
    }
    

    这一切的原因是 getValues() 方法将数据缓存在memcached中,其中键具有值 SimpleKey.EMPTY . 因此,此方法中返回的映射应该具有相同的键值。