Diseño e implementación de Redis_6. Colección de enteros

Implementación de conjunto de enteros

Cuando una colección contiene solo elementos de valor entero y el número no es grande, redis usará la colección de enteros como la implementación subyacente de la clave de colección

typedef strcut intset
{
	uint32_t encoding; //编码方式
	uint32_t length; //元素数量
	int8_t contents[]; //保存元素的数组
}

Puede almacenar valores enteros no repetidos de tipo int16_t, int32_t, int64_t y los elementos están ordenados en la matriz de contenido.

potenciar

Siempre que se agrega un nuevo elemento al conjunto de enteros, y el tipo del nuevo elemento es más largo que todos los tipos de elementos existentes, debe actualizar el conjunto de enteros antes de agregar el elemento

  1. De acuerdo con el nuevo tipo de elemento, expanda el tamaño del espacio de la matriz subyacente de la colección de enteros y asigne espacio para el nuevo elemento
  2. Convierta todos los elementos existentes de la matriz subyacente al mismo tipo que el nuevo elemento y colóquelos en la posición correcta, aún es necesario garantizar el orden
  3. Agregue nuevos elementos a la matriz subyacente

Cada vez que se agrega un nuevo elemento puede causar una actualización, y cada actualización requiere la conversión de tipo de todos los elementos de la matriz subyacente, por lo que la complejidad de tiempo de agregar nuevos elementos es O (N)

El nuevo elemento es más pequeño que todos los elementos existentes y se coloca en el índice 0 de la matriz subyacente; o mayor que todos los elementos, se coloca en la posición del índice longitud-1 de la matriz subyacente.

Beneficios de actualizar

Aumentar la flexibilidad

Las colecciones de enteros pueden adaptarse a nuevos elementos actualizando automáticamente la matriz subyacente, por lo que int16_t, int32_t, int64_t se pueden agregar a la colección a voluntad, sin preocuparse por los errores de tipo

Guardar memoria

No solo permite que la colección almacene tres tipos diferentes de valores al mismo tiempo, sino que también garantiza que la actualización solo se realice cuando sea necesario

Degradar

Guarde tres tipos diferentes de valores a la vez y puede asegurarse de que la actualización solo se realice cuando sea necesario

Degradar

No admite operaciones de degradación, incluso si se elimina el elemento que se actualizó debido a él, la matriz subyacente sigue siendo del tipo después de agregar ese elemento

Supongo que te gusta

Origin blog.csdn.net/weixin_42249196/article/details/108272278
Recomendado
Clasificación