Memcached. Структура хранения данных на сервере
Есть пример класса для кеширования страниц. Непонятно, что мы проверяем в инструкции if ($this->isCached($this->id($id))). Это ключ сохраненный в кеше? И что он должен содержать? Он формируется с помощью метода id. То есть получается строка static_page_1, например. Дальше мы инициализируем объект содержимым кэша. То есть в кеше еще содержатся ключи static_page_content и static_page_title? Мне непонятна именно структура хранения данных в кеше. Вот этри строки, которые мы сформировали, это именно ключи сохраненные в кеше? И что тогда сожержит ключ static_page_1?
<?php ## Базовый класс для кэшируемых страниц
require_once "Page.php";
class Cached extends Page
{
// Время действия кэша
protected $expires;
// Хранилище
protected $store;
// Конструктор класса
public function __construct($title = '', $content = '', $expires = 0)
{
parent::__construct($title, $content);
$this->expires = $expires;
// $this->store = new Memcached();
// $this->store->addServer('localhost', 11211);
// Размещение данных в хранилище
$this->set($this->id('title'), $title);
$this->set($this->id('content'), $content);
}
// Проверить есть ли позиция $key в кэше
protected function isCached($key)
{
// return (bool) $this->store->get($key);
}
protected function set($key, $value, $force = false)
{
// if ($force) {
// $this->store->set($key, $value, $this->expires);
// } else {
// if($this->isCached($key)) {
// $this->store->set($key, $value, $this->expires);
// }
// }
}
// Извлечение значения $key из кэша
protected function get($key)
{
// return $this->store->get($key);
}
// Формируем уникальный ключ для хранилища
public function id($name)
{
die("Что здесь делать? Неизвестно!");
}
// Получение заголовка страницы
public final function title()
{
// if ($this->isCached($this->id('title'))) {
// return $this->get($this->id('title'));
// } else {
return parent::title();
// }
}
// Получение содержимое страницы
public final function content()
{
// if ($this->isCached($this->id('content'))) {
// return $this->get($this->id('content'));
// } else {
return parent::content();
// }
}
}
?>
<?php ## Статические страницы
require_once "Cached.php";
class StaticPage extends Cached
{
// Конструктор класса
public function __construct($id)
{
// Проверяем нет ли такой страницы в кэше
if ($this->isCached($this->id($id))) {
// Есть, инициализируем объект содержимым кэша
parent::__construct($this->title(), $this->content());
} else {
// $query = "SELECT * FROM static_pages WHERE id = :id LIMIT 1"
// $sth = $dbh->prepare($query);
// $sth = $dbh->execute($query, [$id]);
// $page = $sth->fetch(PDO::FETCH_ASSOC);
// parent::__construct($page['title'], $page['title']);
parent::__construct("Контакты", "Содержимое страницы Контакты");
}
}
// Уникальный ключ для кэша
public function id($name)
{
return "static_page_{$name}";
}
}
?>