更新時に同期して spymemcached 2.6 を使用しようとしていますが、次の 2 つの使用方法を見つけました。
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)
2 つ目はもっとシンプルで、私が CASMutation を使用する理由を理解しています... このソファベース クライアントの使用についてフィードバックをいただければ幸いです。