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.