aws memcached

aws - memcached windows



memcache y comodines (4)

¿Qué tal esta función en PHP:

function deleteKeysByIndex($search) { $m = new Memcached(); $m->addServer(''localhost'', 11211); $keys = $m->getAllKeys(); foreach ($keys as $index => $key) { if (strpos($key,$search) !== false) { $m->delete($key); } else { unset($keys[$index]); } } // returns an array of keys which were deleted return $keys; }

Elimina las teclas que comienzan con $ prefijo y devuelve una lista de todas las claves eliminadas. Ejecuté esto en más de 30,000 claves ahora en un servidor compartido y fue bastante rápido, probablemente menos de un segundo.

Me pregunto si hay una manera de borrar Memcache usando comodines para valores clave.

Entonces digo que tengo un caché con la clave "1234 ~ foo" y otro "1234 ~ foo ~ bar".

¿Hay alguna forma en que pueda decir que borre la memoria caché utilizando algo como clear ("1234 *") y que tenga ambos claros desde arriba?

Espero que tenga sentido.

Gracias.


Cree una entrada de memcache para "1234" y dentro de ella almacene una matriz de las claves asociadas. En su rutina de eliminación, lea e itere a través de esas teclas para eliminar.


No, no hay una forma directa fácil de hacer esto. Las FAQ abordan esto y proporcionan una especie de solución alternativa:

Eliminando por espacio de nombres

Si bien memcached no admite ningún tipo de eliminación o eliminación de comodines por espacio de nombres (ya que no hay espacios de nombres), hay algunos trucos que se pueden usar para simular esto. Sin embargo, requieren viajes adicionales a los servidores de memcached.

Ejemplo, en PHP, para usar un espacio de nombres llamado foo:

$ns_key = $memcache->get("foo_namespace_key"); // if not set, initialize it if($ns_key===false) { $ns_key=rand(1, 10000); $memcache->set("foo_namespace_key", $ns_key); } // cleverly use the ns_key $my_key = "foo_".$ns_key."_12345"; $my_val = $memcache->get($my_key); //To clear the namespace do: $memcache->increment("foo_namespace_key");


Una nota sobre la solución de espacio de nombres por Eric Petroelje:

Recuerde que no sabe cuándo Memcached lo desalojará. Memcache podría desalojar su clave de espacio de nombre, y luego, al intentar establecer una nueva clave, tiene una probabilidad de 1 a 10000, que seleccionará la misma clave de índice, lo que significa que obtendrá resultados "sucios". Esto es poco probable, pero el resultado final no es seguro.

El mismo problema es con la solución de Poul Vernon.

Una solución segura será utilizar un almacenamiento confiable (por ejemplo, un disco) para la "clave de puntero" / "clave de espacio de nombres".