Es inevitable encontrar proyectos más embarazosos. La calidad es realmente desordenada y el uso de redis también es desordenado. Entonces habrá un problema. ¿Qué debo hacer si la memoria no lo soporta?
No hay alta disponibilidad, solo un redis desnudo (el plan de alta disponibilidad se discutirá la próxima vez)
Tabla de contenido
Utilice redis-rdb-tools para generar una instantánea de memoria:
Pasos de análisis
Ingrese redis, vea el uso de la memoria
redis -a 密码
info memory
El servidor asigna memoria 5G, maxmemory es 5G y 4.66G está disponible, y todo se agota cuando se produce OOM; para un análisis detallado, puede preguntar a la próxima madre
Solución de emergencia OOM :
Aumente la memoria máxima, config set maxmemory xxx
Establecer estrategia de eliminación de memoria: lo configuré en allkeys-lru
Redis5.0 define varias estrategias para hacer frente a esta situación:
(1) Volatile-lru: Seleccione los datos usados menos recientemente del conjunto de datos con el tiempo de vencimiento establecido y elimínelos.
(2) Volatile-ttl: seleccione los datos a caducar del conjunto de datos con el tiempo de caducidad establecido.
(3) Volátil-aleatorio: seleccione arbitrariamente los datos que se eliminarán del conjunto de datos que ha establecido el tiempo de vencimiento.
(4) Volatile-lfu: seleccione los datos utilizados con menos frecuencia del conjunto de datos con el tiempo de vencimiento establecido y elimínelos.
(5) allkeys-lru: seleccione los datos usados menos recientemente del conjunto de datos para eliminar
(6) allkeys-lfu: seleccione los datos utilizados con menos frecuencia del conjunto de datos y elimínelos.
(7) allkeys-random: seleccione arbitrariamente datos para eliminar del conjunto de datos (server.db [i] .dict)
(8) no-enviction (desalojo): prohíbe el desalojo de datos, esta es también la estrategia predeterminada. Esto significa que cuando la memoria no es suficiente para acomodar los nuevos datos, la nueva operación de escritura reportará un error, la solicitud puede continuar y la tarea en línea no puede continuar. La estrategia de no expulsión puede asegurar que los datos no se pierdan.
Estos ocho tipos se pueden dividir aproximadamente en 4 categorías, lru, lfu, random y ttl.
Al usar las tres estrategias de volatile-lru, volatile-random y volatile-ttl, si no se puede eliminar ninguna clave, se devolverá un error como noeviction
Pero esta es solo una solución temporal, necesita saber cuál es la causa raíz
Pregunta: ¿Por qué 5G no es suficiente? Debe haber una clave grande, o demasiado uso, no se establece un tiempo de vencimiento
De acuerdo, 1. Descubra la clave grande, 2. Reduzca el almacenamiento en caché innecesario, 3. Debe establecer el tiempo de vencimiento
Cómo encontrar la gran llave
Busqué en Internet durante mucho tiempo herramientas útiles, python útil, comandos útiles; si está interesado, puede leer este artículo: https://www.cnblogs.com/yqzc/p/12425533.html
Aquí les presento que es bastante conveniente analizar con rdbtools
Instalar rdbtools
pip install rdbtools install
Si pip no está instalado, instale pip, consulte el tutorial: https://blog.csdn.net/Goligory/article/details/106033972
clon de git https://github.com/sripathikrishnan/redis-rdb-tools
cd redis-rdb-tools
instalación de python3 setup.py
Instalar de la siguiente manera
Utilice redis-rdb-tools para generar una instantánea de memoria:
rdb -c memory dump.rdb> memory.csv
Es posible que no se encuentre Dump.rdb en este momento
Solución:
Iniciar sesión en redis
Comando: guardar
Comando (busque el directorio de instalación): config get dir
Salga, haga cd al directorio de instalación y verá dump.rdb
Ejecute en el directorio dump.rdb: rdb -c memory dump.rdb> memory.csv, el archivo csv está en la carpeta actual, puede exportarlo para verlo directamente, el efecto es el siguiente
También puede usar SQLite para analizar archivos csv. No hablaré de eso aquí. Si está interesado, puede preguntarle a Du Niang.
Referencia: https://www.cnblogs.com/aresxin/p/9014617.html