Diseño e implementación de Redis - Lograr la estructura de datos (a) Cadena

Redis estructura de datos para lograr (a) una cadena

       Redis utilizando SDS (cadena dinámico simple) para cadenas que representan un valor de cadena se pueden modificar. Redis utiliza en la clave y valor.

Nota: Redis este tipo son todas las claves, por un valor diferente de otros tipos, SDS también se puede utilizar en el búfer.

Específicos definidos como sigue:

¿Por qué no nativa cadena de C?

  1. Debido a que hay comandos STRLEN Redis, el comando puede solicitar una clave de longitud correspondiente al valor (tipo de cadena debe ser), si cada cadena de caracteres C se requiere para escanear toda la longitud de la cadena, menos eficiente. Se proporciona el atributo de longitud len SDS y Redis, la longitud se puede determinar en un tiempo O (1) que es.
  2. Cuando existe el problema de desbordamiento de memoria intermedia de concatenación de cadenas en C, Redis también tiene comandos sdscat, que se utiliza la concatenación de cadenas, antes de coser primero comprobará si hay suficiente libre, ningún espacio se asigna costura primero y después.
  3. Redis necesitan almacenar datos binarios, y la cadena a la C '\ 0' se determina si se llega al final, no hay manera de almacenar datos binarios.

Nota: A pesar de sus Redis con SDS, pero con el fin de funciones de manipulación de cadenas reutilización previstas en el lenguaje C, o para seguir un final '\ 0' de la tradicional ~ (len, liberar este no es el '\ 0', pero la asignación real cuando la matriz se asigna en la piel de ante.

políticas de redistribución de memoria SDS?

       Sólo se habla, si no hay será asignado suficiente memoria libre, todos sabemos, una cadena de costura, corte es una operación muy frecuente, la asignación de memoria incorrecta y la recuperación reducirá la eficiencia incluso llevar a una pérdida de memoria, cómo se va a optimizar la asignación de que?

  1. de espacio asignado previamente
    1. Si len modificado menos de 1 M, que se asignará de antemano, junto con la longitud del espacio libre igual a len
    2. Si len modificado 1 M o superior, entonces el espacio es pre-asignado a 1M
  2. espacio inerte liberado

Al cortar la cadena (longitud de la cadena se reduce), y el espacio no se libera inmediatamente, pero siguen siendo para el siguiente uso. Redis SDS también proporciona una liberación de comando de la memoria no utilizada ( sdsRemoveFreeSpace de comandos )

   Inerte código de eliminación es el siguiente:

 

      

Publicado 47 artículos originales · ganado elogios 8 · Vistas a 30000 +

Supongo que te gusta

Origin blog.csdn.net/nanchengyu/article/details/89312589
Recomendado
Clasificación