Comando CAS de Memcached

El comando CAS de Memcached (Check-And-Set o Compare-And-Swap) se utiliza para realizar una operación de "verificar y establecer".

Solo se puede escribir el valor si, después de la última vez que el cliente actual obtuvo el valor, el valor correspondiente a esa clave no ha sido modificado por otros clientes.

La verificación se realiza mediante el parámetro cas_token, que es un valor único de 64 bits que Memcached asigna a los elementos existentes.

Sintaxis:

El formato básico de la sintaxis del comando CAS es el siguiente:

cas key flags exptime bytes unique_cas_token [noreply]
value

Los parámetros se describen a continuación:

  • key:key: la clave en la estructura key-value, utilizada para buscar el valor en caché.
  • flags: parámetro entero que puede incluir pares clave-valor; el cliente lo utiliza para almacenar información adicional sobre el par clave-valor.
  • exptime: duración del tiempo que el par clave-valor se guarda en caché (en segundos; 0 significa para siempre).
  • bytes: número de bytes almacenados en caché.
  • unique_cas_tokenUn valor único de 64 bits obtenido mediante el comando gets.
  • noreply (opcional): este parámetro indica al servidor que no es necesario devolver datos.
  • value: el valor almacenado (siempre en la segunda línea) (puede entenderse directamente como el valor en la estructura key-value).

Ejemplo

Para usar el comando CAS en Memcached, necesitas obtener un token del servicio Memcached mediante el comando gets.

La función del comando gets es similar a la del comando get básico. La diferencia entre ambos comandos es que gets devuelve un poco más de información: un valor entero de 64 bits que es muy parecido a un identificador de "versión" del par nombre/valor.

Los pasos del ejemplo son los siguientes:

  • Si no se ha establecido un token único, el comando CAS generará un error.
  • Si la clave key no existe, la ejecución falla.
  • Añadir un par clave-valor.
  • Obtener el token único mediante el comando gets.
  • Usar el comando cas para actualizar los datos.
  • Usar el comando get para comprobar si los datos se han actualizado.
cas tp 0 900 9
ERROR             <− 缺少 token

cas tp 0 900 9 2
memcached
NOT_FOUND         <− 键 tp 不存在

set tp 0 900 9
memcached
STORED

gets tp
VALUE tp 0 9 1
memcached
END

cas tp 0 900 5 1
redis
STORED

get tp
VALUE tp 0 5
redis
END

Salida

Si los datos se añaden correctamente, la salida es:

STORED

Explicación de la información de salida:

  • STORED: salida después de guardar correctamente.
  • ERROR: error al guardar o error de sintaxis.
  • EXISTS: después de la última obtención del valor, otro usuario también estaba actualizando esos datos.
  • NOT_FOUND: el par clave-valor no existe en el servicio Memcached.
Otras extensiones