2011-02-03 12 views

Respuesta

18

Lo sentimos, pero no. Memcached utiliza un algoritmo hash que distribuye claves en lugares aparentemente aleatorios, por lo que esas claves están dispersas por todas partes. Tendría que escanear todo para encontrarlos.

También debe tener en cuenta que, por diseño, Memcached puede soltar cualquier tecla en cualquier momento y por cualquier motivo. Si estás metiendo cosas, debes ser consciente de que no puedes confiar en que vuelva a salir. Esto está absolutamente bien para su caso de uso original, un caché para reducir visitas en una base de datos. Pero puede ser un problema grave si quieres hacer algo más complicado con él.

Si estas limitaciones son un problema, le sugiero que utilice Redis en su lugar. Se comporta de forma similar a memcached, excepto que conservará los datos y le permitirá almacenar estructuras de datos complejas. Entonces, para su caso de uso, puede almacenar un hash en Redis, luego sacar todo el hash más tarde.

4

Mientras @btilly es correcto al decir que memcached no hacer esto de forma nativa, puede emularlo (con bastante eficiencia) mediante el mantenimiento de un índice de claves que comparten su prefijo, lo que le permite a continuación, recupera todas las entradas que coincida con un cierto prefijo.

Obviamente, esto solo funcionará para claves específicas que elijas de antemano y no datos arbitrarios, pero es bastante viable si puedes vivir con esa limitación. Hay a good article on this subject por uno de los desarrolladores de Memcache.

3

un comando rápido para buscar si existe una clave específica (el nombre de clave puede ser un "expresiones regulares grep")

for i in {1..40}; do (echo "stats cachedump $i 0"; sleep 1; echo "quit";) | telnet localhost 11211 | grep 'APREFIX*\|ANOTHERPREFIX*'; done 
Cuestiones relacionadas