Write-Aside Cache es un patrón de caching en el que los datos se escriben directamente al almacenamiento persistente (base de datos, disco, etc.), sin pasar por la caché. Una vez que la escritura al almacenamiento principal es exitosa, la entrada correspondiente en la caché es invalidada o eliminada, asegurando que cualquier lectura posterior obtenga los datos más recientes directamente del origen o los recargue en la caché. Este enfoque difiere de Write-Through y Write-Back en que la caché no participa activamente en la ruta de escritura inicial, sino que se encarga de mantener su estado consistente con el almacenamiento subyacente.
Este patrón se implementa comúnmente en sistemas donde la consistencia de los datos es crítica y la latencia de escritura a la caché no es el principal cuello de botella, o cuando la caché es volátil y no se desea que sea la fuente de verdad para las escrituras. Por ejemplo, muchos ORMs y frameworks de persistencia de datos, como Hibernate o Entity Framework, pueden configurarse para operar de manera similar, escribiendo directamente a la base de datos y luego invalidando cachés de segundo nivel. Sistemas de caching distribuidos como Redis o Memcached, cuando se usan en combinación con una base de datos, a menudo se configuran para usar Write-Aside: la aplicación escribe a la base de datos y luego ejecuta un comando `DEL` o `FLUSH` para invalidar la clave en la caché, forzando una recarga en la próxima lectura.
Para un arquitecto, Write-Aside Cache es una elección estratégica importante cuando la durabilidad y la consistencia de las escrituras son prioritarias sobre la latencia de escritura a la caché. Reduce la complejidad de la caché al no tener que gestionar la persistencia de las escrituras, simplificando la lógica de recuperación ante fallos de la caché. Sin embargo, introduce una latencia adicional en las lecturas subsiguientes a una escritura si la entrada es invalidada y debe ser recargada. El trade-off clave es entre la simplicidad y robustez de la escritura (directa al almacenamiento primario) y la posible penalización de latencia en la primera lectura después de una escritura. Es ideal para cargas de trabajo con muchas lecturas y escrituras menos frecuentes, donde la consistencia es primordial y la aplicación puede tolerar una ligera demora en la propagación de los datos a la caché después de una escritura.