Cómo eliminar datos en modo mediante Redis

  

Un servidor Redis consume decenas de G de memoria en un corto período de tiempo y, finalmente, se bloquea debido a SWAP. Debido a que los antecedentes sociales de este servidor son más complicados, es imposible juzgar quién es el sospechoso.


La intuición inicial es que algunas personas han guardado una gran cantidad de datos, por lo que el problema es averiguar qué claves ocupan mucho espacio, los colegas de DBA utilizaron redis-rdb Herramientas como herramientas para analizar archivos de datos. Es una pena que, aunque se encontraron algunas claves de gran volumen, los sospechosos finalmente se descartaron y el problema parecía estar en un punto muerto.

Después de insinuarnos en un callejón sin salida, comenzamos a ajustar el ángulo de la investigación: incluso si el espacio ocupado por una clave en sí no es grande, si el número de claves en el mismo modo es grande, entonces el total ocupará una gran cantidad de espacio. Entonces, el problema se convierte en mucho espacio para averiguar qué teclas del mismo modo ocupan. Esta vez no quiero usar ninguna herramienta, pero quiero verificar los cambios de memoria al eliminar las claves sospechosas en el servidor de prueba:

 shell> /path /to /redis-cli keys foo: * |
  Xargs /path /to /redis-cli del 

¡El triste recordatorio es que el servidor está colgado cuando se ejecuta este comando! Debido a que hay demasiados datos, KEYS no puede soportarlo. SCAN debe usarse en este punto, tiene el concepto de un cursor y solo una pequeña cantidad de datos está involucrada en cada iteración.

Es un poco complicado usar SCAN directamente en la línea de comandos, así que usé PHP
:

 <? php $ redis = new Redis (); $ redis- > setOption (Redis :: OPT_SCAN, Redis :: SCAN_RETRY); $ match = 'foo: *'; $ count = 10000; while ($ keys = $ redis- > scan ($ it, $ match, $ count)) { $ redis- > del ($ keys);}? > 

Asegúrese de monitorear los cambios de memoria al eliminar, puede confirmar el problema:

 shell > watch -d -n 1 '/Ruta /a /redis-cli info |
  Grep memory '

En cuanto a la adquisición de claves sospechosas, soy un ignorante, simplemente obtengo los datos de muestreo a través de MONITOR o SCAN. Además, a partir de este caso, el cambio en el número total de claves de monitoreo es muy importante, desde INFO puede tomar Ir a ello

Copyright © Conocimiento de Windows All Rights Reserved