我正在尝试使用 spymemcached 2.6 与更新同步,我发现了以下两种使用方式:
使用 CASMutation 定义一个 CASMutator,这是一种非常侵入性的实现方式,让我们看一个例子:
public List<Item> addAnItem(final Item newItem) throws Exception { // This is how we modify a list when we find one in the cache. CASMutation<List<Item>> mutation = new CASMutation<List<Item>>() { // This is only invoked when a value actually exists. public List<Item> getNewValue(List<Item> current) { // 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); // If the list is already "full", pop one off the end. if(ll.size() > 10) { ll.removeLast(); } // Add mine first. ll.addFirst(newItem); return ll; } }; // The initial value -- only used when there's no list stored under // the key. List<Item> initialValue=Collections.singletonList(newItem); // The mutator who'll do all the low-level stuff. CASMutator<List<Item>> mutator = new CASMutator<List<Item>>(client, transcoder); // This returns whatever value was successfully stored within the // cache -- either the initial list as above, or a mutated existing // one return mutator.cas("myKey", initialValue, 0, mutation); }
或通过使用cas
方法
cas(String key, long casId, Object value)
完成后:
gets(String key, Transcoder<T> tc)
第二个真的更简单,我明白我为什么要使用 CASMutation ......我真的很高兴能得到一些关于使用这个 couchbase 客户端的反馈。