首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >不理解spymemcached的示例代码

不理解spymemcached的示例代码
EN

Stack Overflow用户
提问于 2012-04-24 07:57:07
回答 1查看 1.5K关注 0票数 0

我正在使用spymemcached客户机来实现我的缓存逻辑。不知何故,我需要使用CAS同时修改缓存中的某些内容。

我看到所有者已经展示了一个非常好的示例,说明如何从这里使用CASMutation:http://code.google.com/p/spymemcached/wiki/Examples#Using_CAS

但关于这部分代码,我有一个问题:

代码语言:javascript
运行
复制
 // Not strictly necessary if you specify the storage as
 // LinkedList (our initial value isn't), but I like to keep
 // things functional anyway, so I'm going to copy this list
 // first.
 LinkedList<Item> ll = new LinkedList<Item>(current);

尽管我仔细阅读了这些评论,但我仍然不明白它到底想做什么。如果我们只使用"current“而不复制到"ll”呢?潜在的问题是什么?

更新

我正在遵循示例代码,并实现了这样的方法,这起作用吗?

代码语言:javascript
运行
复制
public <T> Set<T> addItemToSet(String key, int expire, final T newItem) throws Exception     {

    // This is how we modify a list when we find one in the cache.
    CASMutation<Set<T>> mutation = new CASMutation<Set<T>>() {

        // This is only invoked when a value actually exists.
        public Set<T> getNewValue(Set<T> current) {
            current.add( newItem );
            return current;
        }

    };

    HashSet<T> initialValue= new HashSet<T>();
    initialValue.add( newItem );

    CASMutator<Set<T>> mutator = new CASMutator<Set<T>>( memClient, getTranscoder() );

    return mutator.cas(key, initialValue, expire, mutation);
}

我最关心的是它是否是线程安全的。

EN

回答 1

Stack Overflow用户

发布于 2012-04-24 08:15:05

在没有使用过库的情况下,我相信,在这种情况下,如果不进行复制,您将得到一个异常,因为您试图修改Collections.singletonList()是不可变的。List的某些实现根本不能被修改,假设您可以这样做通常是个坏主意。(如果Java将List的概念分离为索引可读的序列,并将MutableList子接口与所有的addset操作分开,那就太好了。)

从更广泛的意义上说,我甚至不确定这是否“严格意义上的必要”。这里发生的情况是,您将获得现有的项列表,并被要求返回一个新值,以便在CAS条件保持不变的情况下使用。如果您修改了列表,然后返回current,问题是您已经失去了条件--当前的列表已经修改了(由您修改),即使CAS逻辑意味着建议的新值被拒绝。

实际上,这可能并不重要,因为库逻辑意味着实际存储在缓存中的值不会被更新;更改瞬态也不是问题,因为经过足够的尝试,您的更新就会成功。

但是,尽管如此,我同意完全没有理由不使用函数方法--您将被赋予一个输入参数来读取,并且期望返回一个包含您的修改的列表。对于程序的清晰性、健壮性和推理性而言,创建一个具有正确值的新列表并返回该列表要好得多。不这样做可能有效,也可能不起作用,但是谁想要编写语义依赖于其他库的实现细节的代码,而您可以选择编写明确的代码呢?

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10293948

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档