Я использую клиент spymemcached для реализации моей логики кэширования. Как-то мне нужно использовать CAS для одновременного изменения некоторого содержимого в кеше.не понимаю пример кода spymemcached
Я видел, что владелец уже показал очень хороший пример того, как использовать CASMutation здесь: http://code.google.com/p/spymemcached/wiki/Examples#Using_CAS
Но у меня есть один вопрос об этой части кода:
// 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);
Даже если я внимательно прочитайте комментарии, я до сих пор не понимаю, что именно он пытается сделать здесь. Что делать, если мы просто используем «ток» без копирования на «ll»? Каковы потенциальные проблемы?
[UPDATE]
Я следую пример кода и реализован метод, как это, будет работать?
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);
}
Я в основном обеспокоен тем, является ли он потокобезопасным.