Me gustaría saber cuál sería un mejor enfoque para invalidar / actualizar objetos de caché.
Prerrequisitos
- Tener un servidor memcached remoto (que sirve como caché para múltiples aplicaciones)
- Todos los servidores están alojados por azure (regiones de afinidad, mismos centros de datos)
- El tamaño del objeto de caché varía de 200 bytes a 50 kilobytes
Enfoque 1 (almacenar en caché lo antes posible)
- Se crea el objeto A -> almacenar en base de datos y almacenar en caché
- Objeto A solicitado por el cliente -> verificar la existencia de la memoria caché, de lo contrario, buscar de la base de datos y almacenar en la memoria caché
- El objeto A se actualiza -> almacenar en la base de datos, almacenar en caché
El enfoque 1 parece ser más directo. Si se crea algo, colóquelo en la memoria caché lo antes posible. Independientemente de que alguien lo necesite.
Enfoque 2 (almacén de caché perezoso)
- Se crea el objeto A -> almacenar en la base de datos
- Objeto A solicitado por el cliente -> verificar la existencia de la memoria caché, de lo contrario, buscar de la base de datos y almacenar en la memoria caché
- El objeto A se actualiza -> almacenar en la base de datos, eliminar clave en caché
El enfoque 2 parece ser más consciente de la memoria. En este enfoque, solo los elementos solicitados van a la memoria caché.
Pregunta 1: Teniendo en cuenta el rendimiento, ¿cuál sería un mejor enfoque? La memoria ni la CPU aún no cuentan.
Pregunta 2: ¿Son mis pensamientos una especie de optimización prematura?
Pregunta 3: ¿ Alguna otra idea? Otros enfoques?
performance
azure
memcached
caching
lurkerbelow
fuente
fuente
memcached gestiona objetos con su propia política, cuyo objeto en caché caducaría si nadie accede a él o si memcached se queda sin memoria. Por lo tanto, su primer enfoque no es una buena idea ya que su objeto en memcached seguiría siendo invalidado debido a la falta de memoria cuando está creando objetos.
Q1. El enfoque 2 sería mejor en términos de rendimiento porque no envía objetos a memcached, aunque la mejora del rendimiento es muy pequeña.
Q2 Es difícil de decir. Suponga que conoce el cuello de botella y redacte los enfoques, no sería prematuro.
Q3. Hay otro enfoque, como la memoria caché solo en memcached.
fuente