У меня возникают некоторые мысли о том, где реализовать часть кэширования. Где, пожалуй, самое подходящее место для его реализации?
Внутри каждой модели или в контроллере?
Подход 1 (psuedo-code):
// 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;
}
}
Подход 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;
}
}
Мысли:
Подход 1:
-
Нет мультигитов/мульти-наборов. Если будет возвращено большое количество ключей, накладные расходы будут вызваны.
-
Легче поддерживать, вся обработка базы данных/кеша находится в каждой модели
Подход 2:
-
Лучше производительность - используется мультимножество/мультисчет
-
Требуется больше кода
-
Сложнее поддерживать
Расскажите, что вы думаете!