TairHash (exHash) es una estructura de datos hash que permite establecer un tiempo de caducidad y una versión para cada campo. Esta capacidad aumenta la flexibilidad de la estructura de datos hash y simplifica el desarrollo en diversos escenarios.
Descripción general
TairHash amplía el hash estándar de Redis con dos capacidades de las que carece el hash nativo: caducidad por campo y control de versiones por campo. Es posible establecer un TTL en campos individuales sin afectar al resto de la clave, así como utilizar números de versión para evitar conflictos en escrituras simultáneas.
TairHash emplea un algoritmo de caducidad activa que revisa y elimina proactivamente los campos caducados sin afectar notablemente el tiempo de respuesta. También admite la caducidad pasiva, la cual elimina los campos caducados al momento de acceder a ellos.
Funciones principales
Establecer un tiempo de caducidad y una versión para cada campo.
Utilizar directivas de caducidad activa y pasiva para los campos.
Emplear una sintaxis similar al tipo de datos hash nativo de Redis.
Este módulo es de código abierto. Para obtener más información, consulte TairHash.
Requisitos previos
Antes de empezar, asegúrese de contar con lo siguiente:
-
Una instancia de Tair de uno de los siguientes tipos:
Persistent memory-optimized (versión menor 1.2.6 o posterior)
Mantenga su instancia en la versión menor más reciente para obtener funciones adicionales y mayor estabilidad. Consulte Minor version update . En instancias con arquitectura de clúster o de división de lectura/escritura, actualice también los nodos proxy; de lo contrario, es posible que algunos comandos no se reconozcan.
Precauciones
Los comandos operan sobre datos TairHash dentro de una instancia de Tair.
Comandos
A continuación se listan todos los comandos de TairHash, agrupados por tipo de operación.
Comandos de escritura
|
Comando |
Sintaxis |
Descripción |
||
|
EXHSET |
|
XX] [VER |
ABS version] [KEEPTTL]` |
Agrega un campo a la clave TairHash especificada. Crea la clave si no existe. Sobrescribe el valor del campo si este ya existe. |
|
EXHMSET |
|
Agrega varios campos a la clave TairHash especificada. Crea la clave si no existe. Sobrescribe los valores de los campos existentes. |
||
|
EXHINCRBY |
|
ABS version] [MIN minval] [MAX maxval] [KEEPTTL]` |
Incrementa el valor entero de un campo en |
|
|
EXHINCRBYFLOAT |
|
ABS version] [MIN minval] [MAX maxval] [KEEPTTL]` |
Incrementa el valor de punto flotante de un campo en |
Comandos de caducidad
|
Comando |
Sintaxis |
Descripción |
|
|
EXHEXPIRE |
|
ABS version]` |
Establece un tiempo de caducidad relativo en segundos para un campo. |
|
EXHPEXPIRE |
|
ABS version]` |
Establece un tiempo de caducidad relativo en milisegundos para un campo. |
|
EXHEXPIREAT |
|
ABS version]` |
Establece un tiempo de caducidad absoluto (marca de tiempo UNIX en segundos) para un campo. |
|
EXHPEXPIREAT |
|
ABS version]` |
Establece un tiempo de caducidad absoluto (marca de tiempo UNIX en milisegundos) para un campo. |
Comandos de lectura
|
Comando |
Sintaxis |
Descripción |
|
EXHGET |
|
Obtiene el valor de un campo. Devuelve |
|
EXHMGET |
|
Obtiene los valores de varios campos. Devuelve |
|
EXHGETWITHVER |
|
Obtiene el valor y el número de versión de un campo. Devuelve |
|
EXHMGETWITHVER |
|
Obtiene los valores y los números de versión de varios campos. |
|
EXHTTL |
|
Obtiene el TTL restante de un campo, en segundos. |
|
EXHPTTL |
|
Obtiene el TTL restante de un campo, en milisegundos. |
|
EXHVER |
|
Obtiene el número de versión actual de un campo. |
|
EXHLEN |
|
Obtiene la cantidad de campos en la clave. Especifique |
|
EXHEXISTS |
|
Comprueba si un campo existe. |
|
EXHSTRLEN |
|
Obtiene la longitud de la cadena de valor de un campo. |
|
EXHKEYS |
|
Obtiene todos los campos de la clave. |
|
EXHVALS |
|
Obtiene todos los valores de los campos en la clave. |
|
EXHGETALL |
|
Obtiene todos los campos y sus valores en la clave. |
|
EXHSCAN |
|
Explora la clave de forma iterativa. Solo para instancias optimizadas para memoria. |
Comandos de versión
|
Comando |
Sintaxis |
Descripción |
|
EXHSETVER |
|
Establece el número de versión de un campo. |
Comandos de eliminación
|
Comando |
Sintaxis |
Descripción |
|
EXHDEL |
|
Elimina uno o más campos de la clave. |
|
|
Elimina una o más claves TairHash mediante el comando DEL nativo de Redis. |
Convenciones de sintaxis
|
Convención |
Significado |
|
|
|
Palabra clave del comando |
|
|
|
Variable |
|
|
|
Parámetro opcional |
|
|
|
B` |
Exclusión mutua: especifique solo uno |
|
|
El parámetro se puede repetir |
EXHSET
complejidad temporal|
**Sintaxis** |
** |
XX] [VER |
ABS version] [KEEPTTL]`** |
|
O(1) |
|||
|
Descripción |
Agrega un campo a la clave TairHash especificada. Crea la clave si no existe. Sobrescribe el valor del campo si este ya existe. |
Opciones
|
Opción |
Descripción |
|
|
La clave TairHash. |
|
|
El campo que se va a establecer. |
|
|
El valor del campo. |
|
|
Tiempo de caducidad relativo en segundos. |
|
|
Tiempo de caducidad absoluto como marca de tiempo UNIX en segundos. |
|
|
Tiempo de caducidad relativo en milisegundos. |
|
|
Tiempo de caducidad absoluto como marca de tiempo UNIX en milisegundos. |
|
|
Establece el campo solo si aún no existe. |
|
|
Establece el campo solo si ya existe. |
|
|
Control de concurrencia optimista. Si el campo existe y su versión actual coincide con |
|
|
Establece la versión en un valor exacto, independientemente de la versión actual. |
|
|
Conserva la caducidad actual del campo cuando no se especifica |
Después de establecer un tiempo de espera para un campo, ejecutar EXHSET nuevamente sin una opción de tiempo de espera borra la caducidad (a menos que utiliceKEEPTTL). Para establecer una caducidad en la propia clave, utilice el comando nativoEXPIREoEXPIREAT.
Valores devueltos
|
Valor |
Significado |
|
|
Se creó un nuevo campo. |
|
|
El campo existía y su valor se sobrescribió. |
|
|
Se especificó |
|
|
Se especificó |
Ejemplo
EXHSET myhash field1 val EX 10
(integer) 1
EXHGET
|
**Sintaxis** |
** |
|
Complejidad temporal |
O(1) |
|
Descripción |
Obtiene el valor de un campo. Devuelve |
Valores devueltos
|
Valor |
Significado |
|
Valor del campo |
El campo existe. |
|
|
La clave o el campo no existen. |
Ejemplo
EXHSET myhash field1 val
EXHGET myhash field1
"val"
EXHMSET
|
**Sintaxis** |
** |
|
Complejidad temporal |
O(N), donde N es la cantidad de campos |
|
Descripción |
Agrega varios campos a la clave TairHash especificada. Crea la clave si no existe. Sobrescribe los valores de los campos existentes. |
Para establecer la caducidad en campos individuales después de su creación, utilice EXHEXPIRE, EXHPEXPIRE, EXHEXPIREAT o EXHPEXPIREAT. Para establecer la caducidad en la propia clave, utilice el comando nativoEXPIREoEXPIREAT.
Valores devueltos
|
Valor |
Significado |
|
|
La operación se completó correctamente. |
Ejemplo
EXHMSET myhash field1 val1 field2 val2
OK
EXHEXPIRE
|
**Sintaxis** |
** |
ABS version]`** |
|
Complejidad temporal |
O(1) |
|
|
Descripción |
Establece un tiempo de caducidad relativo en segundos para un campo. |
Opciones
|
Opción |
Descripción |
|
|
La clave TairHash. |
|
|
El campo al que se le establecerá la caducidad. |
|
|
Tiempo de caducidad relativo en segundos. |
|
|
Mismo comportamiento de concurrencia optimista que en EXHSET. |
|
|
Establece la versión en un valor exacto, independientemente de la versión actual. |
Valores devueltos
|
Valor |
Significado |
|
|
El campo existe y se estableció la caducidad. |
|
|
El campo no existe. |
Ejemplo
EXHSET myhash field1 val
EXHEXPIRE myhash field1 100
(integer) 1
EXHPEXPIRE
|
**Sintaxis** |
** |
ABS version]`** |
|
Complejidad temporal |
O(1) |
|
|
Descripción |
Establece un tiempo de caducidad relativo en milisegundos para un campo. |
Opciones
|
Opción |
Descripción |
|
|
La clave TairHash. |
|
|
El campo al que se le establecerá la caducidad. |
|
|
Tiempo de caducidad relativo en milisegundos. |
|
|
Mismo comportamiento de concurrencia optimista que en EXHSET. |
|
|
Establece la versión en un valor exacto, independientemente de la versión actual. |
Valores devueltos
|
Valor |
Significado |
|
|
El campo existe y se estableció la caducidad. |
|
|
El campo no existe. |
Ejemplo
EXHSET myhash field1 val
EXHPEXPIRE myhash field1 1000
(integer) 1
EXHEXPIREAT
|
**Sintaxis** |
** |
ABS version]`** |
|
Complejidad temporal |
O(1) |
|
|
Descripción |
Establece un tiempo de caducidad absoluto (marca de tiempo UNIX en segundos) para un campo. |
Opciones
|
Opción |
Descripción |
|
|
La clave TairHash. |
|
|
El campo al que se le establecerá la caducidad. |
|
|
Marca de tiempo UNIX absoluta en segundos. |
|
|
Mismo comportamiento de concurrencia optimista que en EXHSET. |
|
|
Establece la versión en un valor exacto, independientemente de la versión actual. |
Valores devueltos
|
Valor |
Significado |
|
|
El campo existe y se estableció la caducidad. |
|
|
El campo no existe. |
Ejemplo
EXHEXPIREAT myhash field1 1293840000
(integer) 1
EXHPEXPIREAT
|
**Sintaxis** |
** |
ABS version]`** |
|
Complejidad temporal |
O(1) |
|
|
Descripción |
Establece un tiempo de caducidad absoluto (marca de tiempo UNIX en milisegundos) para un campo. |
Opciones
|
Opción |
Descripción |
|
|
La clave TairHash. |
|
|
El campo al que se le establecerá la caducidad. |
|
|
Marca de tiempo UNIX absoluta en milisegundos. |
|
|
Mismo comportamiento de concurrencia optimista que en EXHSET. |
|
|
Establece la versión en un valor exacto, independientemente de la versión actual. |
Valores devueltos
|
Valor |
Significado |
|
|
El campo existe y se estableció la caducidad. |
|
|
El campo no existe. |
Ejemplo
EXHPEXPIREAT myhash field1 1293840000000
(integer) 1
EXHTTL
|
**Sintaxis** |
** |
|
Complejidad temporal |
O(1) |
|
Descripción |
Obtiene el TTL restante de un campo, en segundos. |
Valores devueltos
|
Valor |
Significado |
|
Entero positivo |
TTL restante en segundos. |
|
|
El campo existe pero no tiene caducidad establecida. |
|
|
La clave no existe. |
|
|
El campo no existe. |
Ejemplo
El siguiente ejemplo muestra todos los estados de retorno posibles en una sola secuencia: un campo con TTL establecido (85) y un campo sin caducidad (-1).
EXHSET myhash field1 val1 EX 100
EXHSET myhash field2 val2
EXHTTL myhash field1
EXHTTL myhash field2
EXHTTL myhash field3
(integer) 85
(integer) -1
(integer) -3
EXHPTTL
|
**Sintaxis** |
** |
|
Complejidad temporal |
O(1) |
|
Descripción |
Obtiene el TTL restante de un campo, en milisegundos. |
Valores devueltos
|
Valor |
Significado |
|
Entero positivo |
TTL restante en milisegundos. |
|
|
El campo existe pero no tiene caducidad establecida. |
|
|
La clave no existe. |
|
|
El campo no existe. |
Ejemplo
EXHSET myhash field1 val1 EX 100
EXHPTTL myhash field1
(integer) 97213
EXHVER
|
**Sintaxis** |
** |
|
Complejidad temporal |
O(1) |
|
Descripción |
Obtiene el número de versión actual de un campo. |
Valores devueltos
|
Valor |
Significado |
|
Entero positivo |
El número de versión actual. |
|
|
La clave no existe. |
|
|
El campo no existe. |
Ejemplo
EXHVER myhash field1
(integer) 1
EXHSETVER
|
**Sintaxis** |
** |
|
Complejidad temporal |
O(1) |
|
Descripción |
Establece el número de versión de un campo en un valor exacto. |
Valores devueltos
|
Valor |
Significado |
|
|
Se estableció la versión. |
|
|
La clave o el campo no existen. |
Ejemplo
EXHSETVER myhash field1 3
(integer) 1
EXHINCRBY
|
**Sintaxis** |
** |
ABS version] [MIN minval] [MAX maxval] [KEEPTTL]`** |
|
Complejidad temporal |
O(1) |
|
|
Descripción |
Incrementa el valor entero de un campo en |
Opciones
|
Opción |
Descripción |
|
|
La clave TairHash. |
|
|
El campo que se va a incrementar. |
|
|
Valor entero del incremento. |
|
|
Igual que en EXHSET. |
|
|
Mismo comportamiento de concurrencia optimista que en EXHSET. |
|
|
Establece la versión en un valor exacto, independientemente de la versión actual. |
|
|
Valor mínimo permitido. Devuelve un error si el resultado fuera menor que |
|
|
Valor máximo permitido. Devuelve un error si el resultado superara |
|
|
Conserva la caducidad actual del campo. Mismo comportamiento que en EXHSET. |
Después de establecer un tiempo de espera para un campo, ejecutar EXHINCRBY nuevamente sin una opción de tiempo de espera borra la caducidad (a menos que utilice KEEPTTL ).
Valores devueltos
|
Valor |
Significado |
|
Entero |
El nuevo valor después del incremento. |
Ejemplo
EXHMSET myhash field1 10
EXHINCRBY myhash field1 100
(integer) 110
EXHINCRBYFLOAT
|
**Sintaxis** |
** |
ABS version] [MIN minval] [MAX maxval] [KEEPTTL]`** |
|
Complejidad temporal |
O(1) |
|
|
Descripción |
Incrementa el valor de punto flotante de un campo en |
Opciones
|
Opción |
Descripción |
|
|
La clave TairHash. |
|
|
El campo que se va a incrementar. |
|
|
Valor de punto flotante del incremento. |
|
|
Igual que en EXHSET. |
|
|
Mismo comportamiento de concurrencia optimista que en EXHSET. |
|
|
Establece la versión en un valor exacto, independientemente de la versión actual. |
|
|
Valor mínimo permitido. Devuelve un error si el resultado fuera menor que |
|
|
Valor máximo permitido. Devuelve un error si el resultado superara |
|
|
Conserva la caducidad actual del campo. Mismo comportamiento que en EXHSET. |
Después de establecer un tiempo de espera para un campo, ejecutar EXHINCRBYFLOAT nuevamente sin una opción de tiempo de espera borra la caducidad (a menos que utilice KEEPTTL ).
Valores devueltos
|
Valor |
Significado |
|
Cadena de punto flotante |
El nuevo valor después del incremento. |
Ejemplo
EXHMSET myhash field1 10
EXHINCRBYFLOAT myhash field1 9.235
"19.235"
EXHGETWITHVER
|
**Sintaxis** |
** |
|
Complejidad temporal |
O(1) |
|
Descripción |
Obtiene el valor y el número de versión de un campo. Devuelve |
Valores devueltos
|
Valor |
Significado |
|
Matriz de |
El campo existe. |
|
|
La clave o el campo no existen. |
Ejemplo
EXHGETWITHVER myhash field1
1) "19.235"
2) (integer) 5
EXHMGET
|
**Sintaxis** |
** |
|
Complejidad temporal |
O(1) |
|
Descripción |
Obtiene los valores de varios campos. Devuelve |
Valores devueltos
|
Valor |
Significado |
|
|
La clave no existe. |
|
Matriz de valores |
Un elemento por cada campo solicitado; |
Ejemplo
EXHMSET myhash field1 10 field2 var1
EXHMGET myhash field1 field2
1) "10"
2) "var1"
EXHMGETWITHVER
|
**Sintaxis** |
** |
|
Complejidad temporal |
O(1) |
|
Descripción |
Obtiene los valores y los números de versión de varios campos. Devuelve |
Valores devueltos
|
Valor |
Significado |
|
|
La clave no existe. |
|
Matriz de pares |
Un elemento por cada campo solicitado; |
Ejemplo
EXHMSET myhash field1 10 field2 var1
EXHMGETWITHVER myhash field1 field2
1) 1) "10"
2) (integer) 1
2) 1) "var1"
2) (integer) 1
EXHLEN
|
**Sintaxis** |
** |
|
Complejidad temporal |
O(1) sin |
|
Descripción |
Obtiene la cantidad de campos en la clave. De forma predeterminada, incluye los campos que han caducado pero aún no se han eliminado. Utilice |
Opciones
|
Opción |
Descripción |
|
|
Recorre toda la clave y filtra los campos caducados antes de contar. Tenga en cuenta que |
Valores devueltos
|
Valor |
Significado |
|
Entero |
Cantidad de campos (puede incluir campos caducados pero no eliminados si no se usa |
|
|
La clave no existe. |
Ejemplo
EXHLEN myhash
(integer) 2
EXHEXISTS
|
**Sintaxis** |
** |
|
Complejidad temporal |
O(1) |
|
Descripción |
Comprueba si un campo existe en la clave. |
Valores devueltos
|
Valor |
Significado |
|
|
El campo existe. |
|
|
La clave o el campo no existen. |
Ejemplo
EXHEXISTS myhash field1
(integer) 1
EXHSTRLEN
|
**Sintaxis** |
** |
|
Complejidad temporal |
O(1) |
|
Descripción |
Obtiene la longitud de la cadena de valor de un campo. |
Valores devueltos
|
Valor |
Significado |
|
Entero positivo |
La longitud de la cadena. |
|
|
La clave o el campo no existen. |
Ejemplo
EXHSTRLEN myhash field1
(integer) 2
EXHKEYS
|
**Sintaxis** |
** |
|
Complejidad temporal |
O(N) |
|
Descripción |
Obtiene todos los campos de la clave. |
Valores devueltos
|
Valor |
Significado |
|
Matriz de nombres de campos |
La clave existe. |
|
Matriz vacía |
La clave no existe. |
Ejemplo
EXHMSET myhash field1 10 field2 var1
EXHKEYS myhash
1) "field1"
2) "field2"
EXHVALS
|
**Sintaxis** |
** |
|
Complejidad temporal |
O(N) |
|
Descripción |
Obtiene todos los valores de los campos en la clave. |
Valores devueltos
|
Valor |
Significado |
|
Matriz de valores |
La clave existe. |
|
Matriz vacía |
La clave no existe. |
Ejemplo
EXHMSET myhash field1 10 field2 var1
EXHVALS myhash
1) "10"
2) "var1"
EXHGETALL
|
**Sintaxis** |
** |
|
Complejidad temporal |
O(N) |
|
Descripción |
Obtiene todos los campos y sus valores en la clave. La respuesta alterna entre nombres de campos y valores. |
Valores devueltos
|
Valor |
Significado |
|
Matriz de pares campo-valor |
La clave existe. |
|
Matriz vacía |
La clave no existe. |
Ejemplo
EXHMSET myhash field1 10 field2 var1
EXHGETALL myhash
1) "field1"
2) "10"
3) "field2"
4) "var1"
EXHSCAN
|
**Sintaxis** |
** |
|
Complejidad temporal |
O(1) por llamada; O(N) para un recorrido completo |
|
Descripción |
Explora la clave de forma iterativa y devuelve un cursor junto con un lote de pares campo-valor. Solo para instancias optimizadas para memoria. |
Opciones
|
Opción |
Descripción |
|
|
La clave TairHash. |
|
|
Posición inicial de la exploración. Consulte los valores válidos a continuación. |
|
|
Campo de referencia utilizado con |
|
|
Filtra los resultados mediante un patrón de expresión regular aplicado a los nombres de los campos. |
|
|
Cantidad de campos que se explorarán por llamada. El valor predeterminado es |
Valores válidos de op
|
Valor |
Posición inicial |
|
|
Primer campo mayor que |
|
|
Primer campo mayor o igual que |
|
|
Primer campo menor que |
|
|
Primer campo menor o igual que |
|
|
Primer campo igual a |
|
|
Primer campo de la clave |
|
|
Último campo de la clave |
Valores devueltos
La respuesta es una matriz de dos elementos:
El campo inicial para la siguiente llamada de exploración. Vacío cuando la exploración ha terminado.
Los campos explorados y sus valores, intercalados como
[field, value, field, value, ...].
Devuelve una matriz vacía si la clave no existe.
Ejemplo
EXHMSET myhashkey field1 val1 field2 val2 field3 val3 field4 val4 field5 val5
EXHSCAN myhashkey ^ xx COUNT 3
1) "field4"
2) 1) "field1"
2) "val1"
3) "field2"
4) "val2"
5) "field3"
6) "val3"
La siguiente exploración comienza desde field4. Pase field4 como subkey con op >= para continuar.
EXHDEL
|
**Sintaxis** |
** |
|
Complejidad temporal |
O(1) |
|
Descripción |
Elimina uno o más campos de la clave. |
Valores devueltos
|
Valor |
Significado |
|
|
Se eliminó el campo. |
|
|
La clave o el campo no existen. |
Ejemplo
EXHDEL myhash field1
(integer) 1
Preguntas frecuentes
¿Por qué exHash utiliza más memoria que un hash estándar de Redis para los mismos datos?
Cada campo en TairHash almacena metadatos adicionales (la marca de tiempo de caducidad y el número de versión) que un hash estándar de Redis no posee. Estos metadatos adicionales por campo son la causa del mayor uso de memoria.