Red de conocimientos turísticos - Información de alquiler - Acerca de zset (conjunto ordenado) en redis

Acerca de 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?

1. ¿Qué es zset?

Se puede ver en el sitio web oficial de redis (/commands.html#sorted_set). Los estudiantes interesados ​​pueden ir y echar un vistazo directamente.

ZADD clave puntuación1 valor1 puntuación2 valor2.....

En otras palabras, se pueden agregar tanto el grupo de puntuación como el grupo de valor, y se pueden agregar varios al mismo tiempo. time

?4. Implementación de zset

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

zset-max-ziplist-entries 128

zset-max-ziplist-value 64

Ambas condiciones son Si no , la tabla comprimida ziplist se utilizará para implementar el conjunto ordenado

Si se cumple una de estas dos condiciones, la implementación interna del conjunto ordenado se convertirá de ziplist a zset

zset-max-ziplist: entradas 128, es decir,

zset-max-ziplist-value 64, es decir, si algún valor tiene más de 64 bytes, la implementación interna convertirá ziplist a zset.

zset se implementa mediante dict y skiplist.

5. ziplist, la ziplist

La ziplist es una estructura de datos secuencial compuesta de memoria continua. Una lista zip puede contener cualquier cantidad de entradas, cada una de las cuales puede ser una matriz de bytes o un número entero.

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

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 en la figura anterior, si encontramos el primer elemento o el último elemento, podemos usar directamente los tres campos en el longitud del encabezado para encontrarlo. La complejidad es O (1), y si encuentra otros elementos, solo puede encontrarlos en orden y la complejidad es O (n). Para solucionar este problema, puedes utilizar tablas de salto.

Antes de agregar un nuevo nodo, también consultará para determinar la posición de inserción, luego completará la operación de inserción y logrará la clasificación del conjunto ordenado.

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, en lugar de modificar todos los nodos, lo que reduce la complejidad de la inserción, por lo que la tabla de salto es significativamente mejor que el árbol equilibrado en términos de rendimiento de inserción.

?7. Escenarios de aplicación de zset

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

Retrasar la entrega de mensajes y utilizar puntuaciones para almacenar la entrega. marcas de tiempo y utilice tareas programadas para escanear el conjunto ordenado y determinar el tiempo de entrega.