1

有没有人尝试过使整个 memcached 命名空间失效?

例如,我有两种读取方法具有不同的键

@Override
@ReadThroughSingleCache(namespace = UrlClientExclusion.TABLE_NAME, expiration = 24 * HOUR)
public List<UrlClientExclusion> list(@ParameterValueKeyProvider String idClient) {

@Override
@ReadThroughSingleCache(namespace = UrlClientExclusion.TABLE_NAME, expiration = 24 * HOUR)
public UrlClientExclusion find(@ParameterValueKeyProvider int idUrlClientExclusion) {

我想在更新/删除操作时删除整个命名空间 UrlClientExclusion.TABLE_NAME

我不能使用密钥列表方法,因为该应用程序有很多实例

@InvalidateMultiCache(namespace = UrlClientExclusion.TABLE_NAME)
public int update(UrlClientExclusion urlClientExclusion, /*@ParameterValueKeyProvider List<Object> keylist*/ /* it is impossibile for me put all keys in this list*/) {

所以解决方案是删除整个命名空间。

这样做的注释是什么?是否可以构建自定义注释来删除整个命名空间?如何?

非常感谢

4

2 回答 2

1

我不知道如何使用 simple-spring-memcached 库来处理这个问题。但我建议您改用Spring 的 Cache Abstraction。通过这种方式,您可以将缓存存储更改为您的偏好之一,例如ConcurrentHashMapEhcacheRedis。这只是您的应用程序的配置更改。对于命名空间的逐出,您可以执行以下操作:

@CacheEvict(cacheNames="url_client_exclusion", allEntries=true) 
public int update(...)

不幸的是,Pivotal 没有提供对 Memcached 的官方支持,但如果您真的需要使用 Memcached,您可以查看符合 Spring Cache Abstraction 的Memcached Spring Boot库。

有一个示例 Java 应用程序,您可以在其中看到如何使用此库。在那里您还可以找到一个@CacheEvict使用示例(链接)。

于 2019-12-18T18:02:21.847 回答
1

Memcached 不支持命名空间,SSM 提供命名空间作为逻辑抽象。不可能从给定的命名空间中刷新所有键,因为 memcached 不会将键分组到命名空间中。Memcached 仅支持刷新/删除单个键或所有键。

您可以从 memcached 实例中刷新所有数据,或者需要提供应该删除的确切键。

于 2019-12-20T11:10:34.083 回答