Estos contenidos se han traducido de forma automática para su comodidad, pero Huawei Cloud no garantiza la exactitud de estos. Para consultar los contenidos originales, acceda a la versión en inglés.
Centro de ayuda/ Distributed Cache Service/ Preguntas frecuentes/ Uso de Redis/ Explicación y uso de etiquetas de hash
Actualización más reciente 2023-05-08 GMT+08:00

Explicación y uso de etiquetas de hash

Diseño de etiquetas de hash

Las operaciones de múltiples claves, como las que utilizan el comando MSET o los scripts de Lua, son atómicas. Todas las claves especificadas se ejecutan al mismo tiempo. Sin embargo, en un clúster, cada clave es hash a una partición dada, y las operaciones de múltiples claves ya no son atómicas. Las claves pueden asignarse a diferentes ranuras. Como resultado, algunas claves se actualizan, mientras que otras no. Si hay una etiqueta de hash, el clúster determina qué ranura asignar una clave basándose en la etiqueta de hash. Las claves con la misma etiqueta de hash se asignan a la misma ranura.

Uso de etiquetas de hash

Solo el contenido entre la primera llave de apertura ({) y la siguiente primera llave de cierre (}) es hash.

Por ejemplo:

  • En las claves {user1000}.following y {user1000}.followers solo hay un par de llaves. user1000 se va a hash.
  • En la clave foo{}{bar}, no hay contenido entre la primera { y la primera }. Toda la clave foo{}{bar} será hash como de costumbre.
  • En la clave foo{{bar}}zap, {bar (el contenido entre la primera { y la primera }) es hash.
  • En la clave foo{bar}{zap}, bar es hash porque está entre el primer par de { y }.

Ejemplo de etiqueta de hash

Cuando se realiza la siguiente operación:

EVAL "redis.call('set',KEYS[1],ARGV[1]) redis.call('set',KEYS[2],ARGV[2])" 2 key1 key2 value1 value2

Se muestra el siguiente error:

ERR 'key1' y 'key2' no están en la misma ranura

Puede usar una etiqueta de hash para resolver este problema:

EVAL "redis.call('set',KEYS[1],ARGV[1]) redis.call('set',KEYS[2],ARGV[2])" 2 {user}key1 {user}key2 value1 value2