Camada de cache para MVC - Modelo ou controlador?

Estou pensando duas vezes sobre onde implementar a parte do cache. Onde é o local mais apropriado para implementá-lo, você acha?

Dentro de cada modelo, ou no controlador?

Abordagem 1 (código psuedo):
// mycontroller.php

MyController extends Controller_class {
   function index () {
        $data = $this->model->getData();
        echo $data;
   }
}

// myModel.php

MyModel extends Model_Class{
    function getData() {

        $data = memcached->get('data');

        if (!$data) {
            $query->SQL_QUERY("Do query!");
        }

        return $data;
    }  
}
Abordagem 2:
// mycontroller.php

MyController extends Controller_class {
   function index () {
        $dataArray = $this->memcached->getMulti('data','data2');

        foreach ($dataArray as $key) {
            if (!$key) {
                $data = $this->model->getData();
                $this->memcached->set($key, $data);
            }
        }

        echo $data;
   }
}

// myModel.php

MyModel extends Model_Class{
    function getData() {           
        $query->SQL_QUERY("Do query!");

        return $data;
    }  
}

Pensamentos:

Abordagem 1:

Nenhum multiget / multi-set. Se um número alto de chaves for retornado, a sobrecarga será causada.

Mais fácil de manter, todo o manuseio de banco de dados / cache está em cada modelo

Abordagem 2:

Melhor desempenho - multiset / multiget é usado

É necessário mais código

Mais difícil de manter

Me diga o que você acha!

questionAnswers(2)

yourAnswerToTheQuestion