<?php
$m = new Memcached();
$m->addServer('localhost', 11211);
do {
    /* Lee una IP y su CAS */
    $ips = $m->get('ip_block', null, $cas);
    /* Si la IP no existe aún, se crea y se realiza
       un añadido atómico que fallará si la IP ya ha sido añadida */
    if ($m->getResultCode() == Memcached::RES_NOTFOUND) {
        $ips = array($_SERVER['REMOTE_ADDR']);
        $m->add('ip_block', $ips);
    /* De lo contrario, se añade la IP a la lista, y se almacena con la operación
       compare-and-swap y el token, que fallará si la lista ha sido actualizada */
    } else {
        $ips[] = $_SERVER['REMOTE_ADDR'];
        $m->cas($cas, 'ip_block', $ips);
    }
} while ($m->getResultCode() != Memcached::RES_SUCCESS);
?>