En esta página se describe cómo configurar y monitorizar el servicio de Memcache de tu aplicación mediante la consola Google Cloud . También se describe cómo usar la API de Python de memcache de App Engine para definir y recuperar valores almacenados en caché, así como para usar la función de comparación y definición para gestionar solicitudes de escritura simultáneas en la misma clave de memcache. Para obtener más información sobre Memcache, consulta el artículo Información general sobre Memcache.
Configurar memcache
- Ve a la página Memcache de la Google Cloud consola.
Ve a la página Memcache. Selecciona el nivel de servicio de memcache que quieras usar:
- Compartida (opción predeterminada): es gratuita y proporciona capacidad de caché en la medida de lo posible.
- Dedicado: se factura por GB-hora de tamaño de caché y proporciona una capacidad de caché fija asignada exclusivamente a tu aplicación.
Consulta más información sobre las clases de servicio disponibles en Descripción general de Memcache.
Almacenar en caché y obtener valores
Almacenar un valor en caché
Usa add()
para añadir el valor de una clave solo si aún no existe, con
un tiempo de vencimiento opcional:
memcache.add(key="[KEY]", value="[VALUE]", time=[EXPIRATION_TIME])
Por ejemplo, para añadir el valor raining
a la clave weather_USA_98105
con un tiempo de vencimiento de una hora a partir de cuando se escriba el valor:
memcache.add(key="weather_USA_98105", value="raining", time=3600)
Consulte más información sobre add()
y otros métodos para definir valores en la documentación de la API de Python de memcache.
Consulta otros ejemplos de almacenamiento en caché de valores en Ejemplos de Memcache.
Buscar valores almacenados en caché
Usa get()
para buscar el valor de una sola clave:
memcache.get(key="[KEY]")
Por ejemplo, para obtener el valor de la clave weather_USA_98105
:
memcache.get(key="weather_USA_98105")
Consulta más información sobre get()
y otros métodos para buscar valores en la documentación de la API de Python de Memcache.
Monitorizar memcache en la consola de Google Cloud
- Ve a la página Memcache de la Google Cloud consola.
Ve a la página de Memcache - Consulta los siguientes informes:
- Nivel de servicio de Memcache: muestra si tu aplicación usa el nivel de servicio compartido o el dedicado. Si eres el propietario del proyecto, puedes cambiar entre los dos. Más información sobre los niveles de servicio
- Ratio de aciertos: muestra el porcentaje de solicitudes de datos que se han atendido desde la caché, así como el número sin procesar de solicitudes de datos que se han atendido desde la caché.
- Elementos de la caché.
- Antigüedad del elemento más antiguo: la antigüedad del elemento más antiguo almacenado en caché. Ten en cuenta que la antigüedad de un elemento se restablece cada vez que se usa, ya sea para leerlo o escribirlo.
- Tamaño total de la caché.
Puedes llevar a cabo cualquiera de las siguientes acciones:
- Nueva clave: añade una nueva clave a la caché.
- Buscar una clave: recupera una clave que ya tengas.
- Borrar caché: elimina todos los pares clave-valor de la caché.
(Solo Memcache dedicado) Consulta la lista de teclas de acceso rápido.
- Las "claves activas" son claves que reciben más de 100 consultas por segundo (CPS) en la memoria caché.
- Esta lista incluye hasta 100 teclas de acceso rápido, ordenadas por el valor de CPS más alto.
Gestionar las escrituras simultáneas
Para usar la función de comparación y definición para gestionar las escrituras de varias solicitudes en la misma clave de memcache, sigue estos pasos:
- Crea una instancia de un objeto
Client
de memcache. - Usa un bucle de reintentos (preferiblemente con un límite en el número de reintentos y con un tiempo de espera exponencial).
- Dentro del bucle de reintento, obtén la clave mediante
gets()
oget_multi()
con el parámetrofor_cas
definido comoTrue
. - Dentro del bucle de reintento, actualiza el valor de la clave con
cas()
ocas_multi()
.
- Dentro del bucle de reintento, obtén la clave mediante
El siguiente fragmento muestra una forma de usar la función de comparación y asignación:
def bump_counter(key):
client = memcache.Client()
while True: # Retry loop
counter = client.gets(key)
if counter is None: raise KeyError('Uninitialized counter')
if client.cas(key, counter+1):
break
El bucle de reintento es necesario porque, sin él, este código no evita las condiciones de carrera, sino que solo las detecta. El servicio de memcache garantiza que, cuando se usa con el patrón que se muestra aquí (es decir, con gets()
y cas()
), si se da una condición de carrera en la que participan dos o más instancias de cliente diferentes, solo se completará la primera operación cas()
(se devolverá True
), mientras que la segunda (y las posteriores) fallará (se devolverá False
).
Otra mejora que deberías añadir a este código de muestra es establecer un límite en el número de reintentos para evitar un bucle infinito en el peor de los casos, en el que haya mucha contención para el mismo contador. Un ejemplo de cuándo se podría producir este tipo de contención es si hay más solicitudes que intentan actualizar el contador de las que el servicio de memcache puede procesar en tiempo real.
Consulta más información sobre las funciones de comparación y configuración en la descripción general de Memcache.
Siguientes pasos
- Consulta más información sobre Memcache en la información general sobre Memcache.
- Consulta ejemplos de código de Python para usar Memcache en Ejemplos de Memcache.