使用 Simple Spring Memcached 使整个命名空间无效
Invalidate entire namespace using Simple Spring Memcached
有没有人试过使整个 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) {
并且我想在 update/delete 操作
上删除整个命名空间 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*/) {
所以解决方案是删除整个命名空间。
执行此操作的注释是什么?
是否可以构建自定义注解来删除整个命名空间?怎么样?
非常感谢
我不知道如何使用 simple-spring-memcached 库处理这个问题。但我建议您改用 Spring's Cache Abstraction 。通过这种方式,您可以将缓存存储更改为您的偏好之一,例如ConcurrentHashMap
、Ehcache
、Redis
等。这只是您的应用程序的配置更改。对于命名空间的逐出,你可以这样做:
@CacheEvict(cacheNames="url_client_exclusion", allEntries=true)
public int update(...)
遗憾的是,Pivotal 未提供对 Memcached 的官方支持,但如果您确实需要使用 Memcached,您可以查看 Memcached Spring Boot 符合 Spring 缓存抽象的库。
有一个示例 Java 应用程序,您可以在其中了解如何使用此库。在那里您还可以找到 @CacheEvict
用法的示例 (link)。
Memcached 不支持命名空间,SSM 提供命名空间作为逻辑抽象。由于 memcached 不会将键分组到命名空间中,因此无法刷新给定命名空间中的所有键。 Memcached 仅支持 flushing/removing 个单键或所有键。
您可以从 memcached 实例中刷新所有数据,或者需要提供应删除的确切键。
有没有人试过使整个 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) {
并且我想在 update/delete 操作
上删除整个命名空间 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*/) {
所以解决方案是删除整个命名空间。
执行此操作的注释是什么? 是否可以构建自定义注解来删除整个命名空间?怎么样?
非常感谢
我不知道如何使用 simple-spring-memcached 库处理这个问题。但我建议您改用 Spring's Cache Abstraction 。通过这种方式,您可以将缓存存储更改为您的偏好之一,例如ConcurrentHashMap
、Ehcache
、Redis
等。这只是您的应用程序的配置更改。对于命名空间的逐出,你可以这样做:
@CacheEvict(cacheNames="url_client_exclusion", allEntries=true)
public int update(...)
遗憾的是,Pivotal 未提供对 Memcached 的官方支持,但如果您确实需要使用 Memcached,您可以查看 Memcached Spring Boot 符合 Spring 缓存抽象的库。
有一个示例 Java 应用程序,您可以在其中了解如何使用此库。在那里您还可以找到 @CacheEvict
用法的示例 (link)。
Memcached 不支持命名空间,SSM 提供命名空间作为逻辑抽象。由于 memcached 不会将键分组到命名空间中,因此无法刷新给定命名空间中的所有键。 Memcached 仅支持 flushing/removing 个单键或所有键。
您可以从 memcached 实例中刷新所有数据,或者需要提供应删除的确切键。