Oto mój prosty kod Python memcached poniżej:Jak dodać element do listy memcached atomowo (w Pythonie)
import memcache
memcache_client = memcache.Client(['127.0.0.1:11211'], debug=True)
key = "myList"
obj = ["A", "B", "C"]
memcache_client.set(key, obj)
Teraz załóżmy, że chcę dołączyć element „D” na liście w pamięci podręcznej jako myList
, jak mogę to zrobić atomowo?
Wiem, że to źle, ponieważ nie jest atomowy:
memcache_client.set(key, memcache_client.get(key) + ["D"])
Powyższa wypowiedź zawiera warunek wyścigu. Jeśli inny wątek wykona tę samą instrukcję dokładnie we właściwym momencie, jedna z aktualizacji zostanie zepchnięta.
Jak mogę rozwiązać ten stan wyścigu? Jak mogę zaktualizować listę lub słownik przechowywany w memcached atomowo?
https://code.google.com/p/memcached/wiki/NewCommands – user3159253
Prawdopodobne jest to odpowiedź, należy użyć 'CAS()' (check-i-Set) zamiast prostych 'set()' – user3159253
której używasz python memcache? – Anentropic