关于spring memcached注释的singlecache,multicache和assigncache之间的区别

时间:2013-07-17 08:14:21

标签: caching memcached distributed-caching distributed-cache simple-spring-memcached

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

有什么区别:

  1. @ReadThroughSingleCache,@ ReadThroughMultiCache和@ReadThroughAssignCache
  2. @UpdateSingleCache,@ UpdateMultiCache和@UpdateAssignCache
  3. @InvalidateSingleCache,@ InvalidateMultiCache和@InvalidateAssignCache
  4. 此外,更新如何运作。如果我使用某个键对命名空间进行更新,它是否会在同一命名空间中执行所有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更新。

1 个答案:

答案 0 :(得分:1)

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

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

在SSM中,应用程序1和应用程序2之间没有直接通信。为了使其正常工作,两个应用程序都必须使用相同的Simple Spring Memcached配置,包括memcached服务器和提供程序配置,以便它们使用相同的memcached服务器。应用程序可以部署在独立的服务器上。 当一个应用程序把一键分布式缓存使用的 ReadThroughSingleCache UpdateThroughSingleCache 的另一个可以同时使用 ReadThroughSingleCache 访问它。 更新方法的签名应该是使用方法参数作为新值:

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

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