【问题标题】:Difference between singlecache, multicache and assigncache with respect to spring memcached annotations关于spring memcached注解的singlecache、multicache和assigncache的区别
【发布时间】:2013-07-15 16:44:14
【问题描述】:

我正在尝试理解 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){
}

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

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

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

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

【问题讨论】:

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


    【解决方案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。

    【讨论】:

      猜你喜欢
      • 2012-08-27
      • 2014-10-04
      • 2012-05-17
      • 2020-11-26
      • 1970-01-01
      • 2019-01-08
      • 2011-12-10
      • 2012-09-16
      • 1970-01-01
      相关资源
      最近更新 更多