La Red de Conocimientos Pedagógicos - Aprendizaje de redacción de artículos/tesis - zset (conjunto ordenado) en redis

zset (conjunto ordenado) en redis

Las preguntas relacionadas con Zset son preguntas de alta frecuencia en las entrevistas. Entonces, ¿qué es exactamente zset? ¿Cuál es el principio de implementación subyacente? ¿Cuáles son los escenarios de uso relevantes?

¿Qué es 1? zset?

Lo vi en el sitio web oficial de Redis (/commands.html#sorted_set). Los estudiantes interesados ​​pueden ir a verlo directamente.

ZADD puntuación clave 1 valor 1 puntuación 2 valor 2...

En otras palabras, sí, se pueden agregar el grupo de puntuación y el grupo de valores, y se pueden agregar al mismo tiempo. Múltiples grupos.

? 4.Implementación de zset

En redis.conf, existen los dos parámetros siguientes:

zset-max-zip list-entries 128

zset-max- ziplist-value 64

Ambas condiciones no se cumplen, por lo que usamos la tabla de compresión ziplist para implementar conjuntos ordenados.

Si se cumple una de estas dos condiciones, la implementación interna de conjuntos ordenados se convertirá de ziplist a zset.

Zset-Max-ziplist-Entries 128, es decir, cuando el número de pares de elementos en el conjunto ordenado excede 128 (los pares de elementos de puntuación y valor se almacenan, por lo que el elemento de datos es 256), el interno La implementación comenzará desde la lista zip Convertir a Zset.

Zset-max-ziplist-value 64, es decir, si la longitud de cualquier valor excede los 64 bytes, la implementación interna convertirá ziplist a Zset.

Zset se implementa mediante dict y skiplist.

5.? Ziplist, una lista comprimida

Una lista comprimida es una estructura de datos secuencial compuesta por memoria continua. Una lista empaquetada puede contener cualquier cantidad de entradas, cada entrada puede contener una matriz de bytes o un número entero.

El encabezado de la lista vinculada comprimida tiene tres campos: zlbytes, zltail y zllen representan respectivamente la longitud de la lista vinculada (el número de bytes ocupados por toda la lista vinculada), el desplazamiento de la cola de la lista vinculada lista (desde el nodo de cola hasta el inicio, el número de bytes en la dirección) y el número de entradas en la lista vinculada.

También hay un zlend al final de la lista, que indica el final de la lista.

6.skiplist

Como se puede ver en la lista comprimida anterior, si buscamos el primer elemento o el último elemento, podemos usar directamente la longitud de los tres campos. en la posición de cabecera. La complejidad es O (1), pero si busca otros elementos, solo puede buscar secuencialmente y la complejidad es O (n). Para solucionar este problema, podemos utilizar tablas de omisión.

Antes de agregar un nodo, también se consulta para determinar la ubicación de inserción y luego se completa la operación de inserción. Al mismo tiempo, se implementará la clasificación de colecciones clasificadas.

Los nodos recién agregados en la tabla de salto no afectarán las posiciones de índice de otros nodos. Por lo tanto, la operación de inserción solo necesita modificar los punteros antes y después del nodo insertado, y no necesita modificar todos los nodos, lo que reduce la complejidad de la inserción. Por lo tanto, la tabla de salto es significativamente mejor que el árbol equilibrado en términos de. rendimiento de inserción.

? 7. Escenarios de uso de ZSET

Escenarios que requieren clasificación, como los 10 artículos o clasificaciones más populares.

Para el envío retrasado de mensajes, la puntuación se utiliza para almacenar la marca de tiempo de envío y la tarea escanea periódicamente la colección ordenada para determinar el tiempo de envío.