2012-07-17 12 views
5

È possibile utilizzare un metodo per abilitare l'utente a cancellare le voci apc memorizzate con le espressioni regolari?Elimina le chiavi apc memorizzate con un'espressione regolare

Ad esempio, alcune query degli utenti che desidero eliminare dalla cache quando vengono inseriti nuovi dati nel database in modo che i nuovi dati vengano visualizzati al successivo avvio della query.

Diciamo che avete una query amico lista che viene memorizzato nella cache, ma quando un nuovo amico viene aggiunto tutte le query nella cache amico per quell'utente saranno eliminati ...

Se ho le chiavi come questo per gli utenti FriendList:

$sql = "SELECT * FROM friends WHERE userId = :userId"; 

$sqlKey = str_replace(":userId", $userId, $sql);  
$key = $userId."-friend".md5('query'.$sqlKey); 

$data = friendsArray; 
apc_add($key, $data, 60 * 10); 

Poi il risultato desiderato sarebbe quello di eliminare tutte le voci che ha avuto inizio con l'UserID corrente dopo l'esecuzione del aggiungere nuova query amico per assicurare la lista amico visualizza il nuovo utente sulla prossima visione:

apc_delete("~$userId-friend([a-f0-9]+)~"); 

Come l'elenco di amici sql e l'add friend sql sono in documenti diversi questo sembra il modo più semplice per farlo senza riscrivere e digitare lo sql ma non penso che le espressioni regolari siano supportate?

+0

Eventuali duplicati: http://stackoverflow.com/questions/4785153/delete-cache-by-name-in-apc-memcache-eaccelerator –

risposta

3

Come J Fox wrote on php.net, apc_delete accetta anche e la matrice di chiavi o oggetto APCIterator. E APCIterator accetta regex. Così il vostro codice dovrebbe essere circa così:

// delete all keys beginning with a regex match 
$toDelete = new APCIterator('user', '/^' . $userId . '-friend([a-f0-9]+)/', APC_ITER_VALUE); 

var_dump(apc_delete($toDelete)); 
// returns boolean true|false on success or failure