Detalles de bajo nivel de las transmisiones de Redis
Las secuencias de Redis son una estructura de datos solo de appía que proporciona un conjunto de operaciones de lectura e inserción altamente eficientes con un mecanismo de almacenamiento de eficiencia de memoria. Internamente, las transmisiones de Redis usan una estructura de datos de árbol Radix que es un árbol optimizado para el espacio con alta eficiencia de memoria.
Redis Streams almacena datos como una lista de entradas donde cada entrada consiste en pares de valores clave. En un nivel bajo, estas entradas se empacan en macro-nodos, como se muestra en el siguiente.
En este artículo, nos estamos centrando en la eliminación de las entradas de la corriente utilizando el comando XTRIM, y el concepto mencionado anteriormente afecta de cerca la eficiencia de la operación de eliminación. Por lo general, la eliminación de la entrada de flujo de redis es muy eficiente si se realiza en el nivel de macro-nodo pero no en el nivel de entrada. Este mecanismo se implementa con el comando XTRIM que discutiremos en la siguiente sección.
El comando xtrim
El comando XTRIM se usa para cortar las entradas de una secuencia basada en un valor umbral dado. El umbral puede ser un número máximo de entradas por transmisión o una identificación de entrada anterior. El comando XTRIM acepta el tipo de umbral como argumento de comando. La sintaxis del comando xtrim es la siguiente.
Xtrim stream_key maxlen | Minid [= | ~] umbral_value [recuento de límites]
Clave de flujo: La clave de la transmisión Redis.
Maxlen: La longitud máxima de la corriente después de recortar entradas. Se eliminarán todas las entradas que excedan la longitud de la secuencia, que se especifica por el valor umbral. Este argumento es un entero positivo.
Mínimo: La identificación mínima de la corriente que debe permanecer después de recortar las entradas. Se eliminarán todas las entradas que tienen ID inferiores al umbral especificado. Cada vez que especifica este parámetro, el umbral se convierte en un ID de flujo.
= operador: Cuando se especifica, el recorte exacto se realizará en función del valor umbral.
~ operador: Cuando se especifica, se realizará un recorte casi exacto en función del valor umbral y el tamaño de macro-nodo.
umbral_value: El valor umbral basado en el argumento maxlen o minid.
Recuento de límites: El número máximo de entradas a eliminar.
Caso de uso 01: eliminar entradas de flujo basadas en la longitud máxima
Supongamos que una compañía de turismo mantiene una tienda Redis para realizar un seguimiento de la información turística. La estructura de datos de Redis Streams se ha utilizado para almacenar la información de cada turista como pares de valor clave. Con el tiempo, la transmisión ha crecido y planean mantener solo las últimas 1000 entradas. Por lo tanto, han identificado la longitud máxima de la corriente deben ser de 1000 en cualquier momento. El comando xtrim se ha utilizado para lograr esto.
Para fines de demostración, primero, crearemos una transmisión con 10 entradas de la siguiente manera. El comando xadd se ha utilizado para realizar la inserción.
Xadd Touristinfo * Nombre Jack Country Italia FamilyMems 5
Xadd Touristinfo * Nombre Harry Country USA FamilyMems 2
Xadd Touristinfo * Nombre Nikomita Country Japan Familymems 3
Xadd Touristinfo * Nombre Zakaria Country India FamilyMems 2
Xadd Touristinfo * Nombre Redmond Country Brasil Familymems 6
Xadd Touristinfo * Nombre Nakita Country Japan Familymems 3
Xadd Touristinfo * Nombre Maryjohn Country USA FamilyMems 2
Xadd Touristinfo * Nombre del país Italia FamilyMems 5
Xadd Touristinfo * Nombre Nimshikaa Country Japan Familymems 3
Xadd Touristinfo * Nombre Nisha Country Italia FamilyMems 5
Usemos el comando xrange para inspeccionar el stream turistinfo de la siguiente manera.
Xrange Touristinfo - +
Producción:
Como se esperaba, este comando ha mostrado las 10 entradas de transmisión.
Para fines de demostración, recortaremos la corriente donde su longitud máxima sería 5.
Xtrim Touristinfo Maxlen 5
Inspeccionemos nuevamente las entradas de transmisión con el comando xrange.
Como se esperaba, se han desalojado cinco entradas de la corriente, y su longitud es 5.
Caso de uso 02 - Eliminación de entradas de transmisión basadas en ID de transmisión
Tomemos un ejemplo en el que una empresa meteorológica realice un seguimiento de la información meteorológica de una ubicación determinada utilizando transmisiones Redis. Ahora, quieren eliminar entradas más antiguas que ya no se necesitan. Podemos usar el comando XTRIM utilizando la estrategia minid, como se muestra en lo siguiente.
Primero, crearemos una transmisión llamada WeatherInfo y le agregaremos 5 entradas de la siguiente manera.
Xadd WeatherInfo * Temp 10 Humedad 50
Xadd WeatherInfo * Temp 20 Humedad 70
Xadd WeatherInfo * Temp 12 Humedad 65
Xadd WeatherInfo * Temp 15 Humedad 88
Xadd WeatherInfo * Temp 18 Humedad 45
Producción:
Usemos el comando XTRIM para eliminar las entradas que tienen IDS más bajas que el valor umbral especificado.
Xtrim WeatherInfo Minid 1660485503248-0
La ID mínima especificada está asociada con la tercera entrada. Por lo tanto, las entradas después de la tercera entrada que tienen ID más bajas se eliminarán.
Producción:
Dado que no hemos especificado los argumentos = o ~ explícitamente, el comando usa el operador = de forma predeterminada. Por lo tanto, el recorte exacto se ha realizado en ambos casos de uso. Si ha especificado el operador ~ explícitamente, se realizará un recorte casi exacto, como se muestra en lo siguiente.
Como se muestra en la figura anterior, el comando XTRIM se ha utilizado con el operador ~. Le pedimos al comando que elimine todas las entradas que excedan la longitud de 100. Como no obligamos al comando Xtrim a hacer un recorte exacto, se centrará en la eficiencia de la operación de recorte. Entonces, no eliminará las entradas inmediatas que pertenecen al mismo macro-nodo. Mantendrá las próximas tres entradas que están en el mismo nodo macro y eliminará todos los macro-nodos después de esos. Da una cantidad considerable de mejora del rendimiento que en el enfoque de recorte exacto, lo que obliga al comando a hacer un esfuerzo adicional. El mismo procedimiento tiene lugar cuando el umbral se basa en las ID de entrada.
El argumento límite limita el número de entradas desalojadas de la secuencia especificada, que se puede utilizar para obtener un poco más de mejora del rendimiento.
Conclusión
En resumen, el comando XTRIM se usa para eliminar las entradas de flujo en función de un valor umbral. El tipo de valor umbral se puede cambiar con el contexto que se especifica utilizando los argumentos de comando maxlen y minid. Como se discutió, el recorte se puede hacer de dos maneras donde la operación de recorte considerará el umbral como un límite exacto o aproximado. Por defecto, el comando usa el operador = que se utiliza para recortar exactos. Con el operador ~, puede hacer un recorte aproximado como se menciona en la sección anterior. En general, el enfoque de recorte aproximado y el argumento límite lo ayudan a obtener una ganancia de rendimiento considerable con el comando Xtrim.