0

我试图理解 Simple Spring Memcached,但一直坚持下面提到的。

有什么区别:

  1. @ReadThroughSingleCache、@ReadThroughMultiCache 和 @ReadThroughAssignCache
  2. @UpdateSingleCache、@UpdateMultiCache 和 @UpdateAssignCache
  3. @InvalidateSingleCache、@InvalidateMultiCache 和 @InvalidateAssignCache

还有更新是如何工作的。如果我使用某个键对命名空间进行更新,它是否会执行同一命名空间中的所有 read*cache 方法并使用相同的键。如果是,那么它是否适用于多个服务器应用程序。

例如,在某个场景中,用户的积分(针对某事)被缓存 应用程序 1

@ReadThroughSingleCache(namespace="userPoints")
public Integer getUserPoints(@ParamterKeyValueProvide String userId){
}

在来自不同应用程序(可能是后台调度程序)的另一个场景中,调用以下方法:应用程序 2

UpdateThroughSingleCache(namespace="userPoints")
public void updateUserPoints(@ParameterKeyValueProvider String userId, Integer newPoints)
{
      //make database update
}

我的问题是,如果命名空间(“userPoints”)最初有一个 userId(“1234”)的缓存条目为 50 个点,并且使用(“1234”,100)调用更新方法,那么缓存如何知道“1234”的条目必须更新为 100 分。

它应该使用返回值并用旧值更新它(然后需要更改返回类型),或者如果更新是“直写”,则应该使用 db 查找的直接逻辑调用读取方法,然后更新缓存...但是应用程序 2 如何通知应用程序 1 更新。

4

1 回答 1

1

有 3 组缓存注释取决于处理的键的数量:

  • *AssignCache - 缓存键是常量,不依赖于方法的参数,通常用于没有参数的方法,即 getAllUsers()
  • *SingleCache - 使用注解方法的参数创建缓存键,结果存储在单个键下,List类型的方法参数不能用于生成缓存键
  • *MultiCache - 缓存是使用带注释的方法的参数创建的,其中一个参数必须是 List 类型,结果也必须是 List,结果 List 中的每个元素都存储在专用缓存键下

在 SSM 中,应用程序 1 和应用程序 2 之间没有直接通信。为了使其正常工作,两个应用程序必须使用相同的 Simple Spring Memcached 配置,包括 memcached 服务器和提供程序配置,因此它们将使用相同的 memcached 服务器。应用程序可以部署在单独的服务器上。当一个应用程序使用ReadThroughSingleCacheUpdateThroughSingleCache将密钥放入 memcached 时,另一个应用程序可以在使用ReadThroughSingleCache时访问它。更新方法的签名应该是使用方法参数作为新值:

@UpdateThroughSingleCache(namespace="userPoints")
public void updateUserPoints(@ParameterKeyValueProvider String userId, @ParameterDataUpdateContent Integer newPoints)
{
      //make database update
}

如果要使用返回值来更新,请使用@ReturnDataUpdateContent 注释该方法。

于 2013-07-17T13:27:27.210 回答