Este es un enfoque razonable y he seguido esta ruta antes y lo mejor es usar esto para el almacenamiento en caché simple.
Sin embargo, cuando esté actualizando o escribiendo en la base de datos se encontrará con algunos problemas interesantes y debe manejar estos escenarios cuidadosamente.
Por ejemplo, los datos de su caché quedarán obsoletos si el usuario actualiza el registro en la base de datos. En ese escenario, deberá actualizar simultáneamente el caché en memoria o purgar el caché para que se pueda actualizar en la siguiente consulta de búsqueda.
Las cosas también pueden ser complicadas si, por ejemplo, el usuario actualiza la dirección de correo electrónico de un cliente que está en una tabla separada pero asociada a través de una clave externa.
Además del almacenamiento en caché de la base de datos, también debería considerar el almacenamiento en caché de resultados. Esto funciona bastante bien si, por ejemplo, tiene una tabla que muestra los datos de ventas del mes anterior. La tabla se puede almacenar en otro archivo que se incluye en un montón de otras páginas que quieren mostrar la tabla. Ahora, si almacena en caché el archivo con la tabla de datos de ventas, esas otras páginas cuando solicitan este archivo, el motor de almacenamiento en caché puede obtenerlo directamente del disco y la capa de lógica de negocios ni siquiera recibe el golpe. Esto no es aplicable todo el tiempo, pero es bastante útil para controles personalizados.
Unidad de patrón de trabajo
También ayuda a saber sobre el patrón Unit of Work.
Cuando usted está tirando de datos dentro y fuera de una base de datos, es importante mantener un seguimiento de lo que ha cambiado; de lo contrario, esos datos no se escribirán de nuevo en la base de datos. Del mismo modo, tiene que insertar nuevos objetos que cree y eliminar los objetos que elimine.
Usted puede cambiar la base de datos con cada cambio en el modelo de objetos, pero esto puede dar lugar a un montón de muy pequeñas llamadas base de datos, que termina siendo muy lento.Además, requiere que tenga una transacción abierta para la interacción completa , que es poco práctico si tiene una transacción comercial que abarca múltiples solicitudes . La situación es aún peor si necesita realizar un seguimiento de los objetos que ha leído para poder evitar las lecturas inconsistentes .
A Unit of Work realiza un seguimiento de todo lo que hace durante una transacción de negocio que puede afectar a la base de datos . Cuando haya terminado, figura en todo lo que debe hacerse para modificar la base de datos como resultado de su trabajo .
Cuando los datos se actualiza la memoria caché se actualiza, y también actualiza la tabla. He utilizado el patrón de repositorio en este proyecto y todo el acceso a los datos es a través de este exclusivamente. El repositorio en sí mismo siempre golpea el caché y luego db (si el caché está vacío o se están actualizando los datos) – TWith2Sugars
Si aún no lo ha hecho y si opción está disponible para usted, ¿por qué no considerar un ORM? – aleemb