Almacenar en caché datos de una base de datos
1Introducción
Este mini tutorial tiene como objetivo almacenar en caché los datos obtenidos de una base de datos.
Vamos a suponer que ya tienes un sitio web basado en Temma, con un controlador que muestra datos de una base de datos relacional.
2Configuración
En el archivo de configuración, vamos a añadir una fuente de datos correspondiente a un servidor Memcache.
Edita el archivo etc/temma.php:
<?php
return [
'application' => [
'dataSources' => [
'db' => 'mysql://user:pwd@localhost/base',
'cache' => 'memcache://localhost',
],
],
];
- Línea 6: Define la fuente de datos conectada a una base de datos MySQL.
- Línea 7: Define la fuente de datos conectada a un servidor Memcache.
3Controlador
Imaginemos un controlador muy simple que muestra una lista de usuarios.
Aquí tienes un ejemplo de implementación:
<?php
/** Controlador de usuarios. */
class User extends \Temma\Web\Controller {
/** Acción que muestra la lista de usuarios. */
public function list() {
// obtiene la lista desde la base de datos
$users = $this->_loader->UserDao->search();
// almacena la lista en una variable de plantilla
$this['users'] = $users;
}
}
Cada vez que se accede a la acción list, se ejecuta una consulta en la base de datos a través del objeto UserDao.
Ahora vamos a ver cómo podemos añadir un caché para evitar consultar la base de datos cada vez:
<?php
/** Controlador de usuarios. */
class User extends \Temma\Web\Controller {
/** Acción que muestra la lista de usuarios. */
public function list() {
// define la clave de caché
$cacheVarName = 'user:list';
// obtiene la lista desde el caché
$users = $this->cache->get($cacheVarName, function() {
// este código se ejecuta si el valor no está en caché
// obtiene la lista desde la base de datos
return $this->_loader->UserDao->search();
});
// almacena la lista en una variable de plantilla
$this['users'] = $users;
}
}
Toda la información relacionada está disponible en la documentación del caché.