依存データの削除は、memcachedのcas(チェックアンドセット)操作を使用して実行できると思います。各値には一意のID(シリアル)があります。キーごとに、データのシリアルを含む別のkey.dependentsと、すべての依存関係のキーを格納します。
扶養家族を追加するときは、
dependents, dep_serial = fetch(key+".dependents")
data, serial = fetch(key)
if serial != dependents[0]:
# somebody changed the actual data
start_over
generate_and_cache_dependent(dep_key, data)
dependents.append(dep_key)
if not cas(dependents, dep_serial):
# somebody changed dependents
start_over # can avoid regenerating the data if they are still at serial
アイテムを無効にするときは、
dependents, dep_serial = fetch(key + ".dependents")
serial = update(key, new_data)
for dkey in dependents[1:]:
delete(dkey)
dependents = [serial]
if not cas(dependents, dep_serial):
start_over
競合する書き込みが存在する場合でも、1人のライターが常に「通過」するため、これらのアルゴリズムは最終的に終了します。