Acerca de zset (conjunto ordenado) en redis
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.