首页 > 解决方案 > Java:如何从 Ecache 中删除?

问题描述

这就是我在GET请求上缓存数据的方式:

@Cacheable(value = "userCache", key = "T(de.hybris.platform.commercewebservicescommons.cache.CommerceCacheKeyGenerator).generateKey(true,true,'DTO',#currentPage,#pageSize,#sort,#fields)")
public UsersDTO getUsers(final int currentPage, final int pageSize, final String sort,
            final String fields)
{
        // Code......
}

如何仅从缓存中删除其他请求的“DTO”,例如当我触发 DELETE 请求时,我想删除“DTO”?我们可以通过注释来做到这一点吗?

现在我正在这样做,但我认为它正在删除整个 userCache

public void updateUserCache()
    {
        final Cache cache = cacheManager.getCache("userCache");
        final Ehcache ehCache = (Ehcache) cache.getNativeCache();
        ehCache.getKeys().forEach(key -> {
            cache.evict(key);
        });
    }

标签: javaspringjava-8ehcachehybris

解决方案


试试下面的代码:

@CacheEvict(value = "userCache", key="#userId")
public void updateUserCache()
    {
....
...
}

或者你可以这样做

   if (cache.isKeyInCache(userId))
    {
        cache.remove(key);
    }

推荐阅读