Локальный «кэш» для подклассов Zend_Db_Row - PullRequest
3 голосов
/ 07 декабря 2011

В нашем приложении мы используем подклассы Zend_Db_Row для представления объектов в нашем приложении. эти объекты возвращаются различными функциями выборки.

<?php
require_once 'Zend/Db.php';

class Model_Users extends Zend_Db_Table_Abstract
{
    protected $_name = 'users';
    protected $_primary = 'userId';
    protected $_rowClass = 'Model_User';

    /**
     * fetch user by email
     * 
     * @param string $email
     */
    public function fetchWithEmail($email)
    {
        $select = $this->select();
        $select->where('email = ?', $email);
        return $this->fetchRow($select);
    }

}

Проблема в том, что мы вызываем функции выборки несколько раз (с одинаковыми значениями) из разных функций, моделей, контроллеров и тому подобного. так, например, $modelUsers->fetchWithEmail('user@domain.com') появляется 10 раз при выполнении одного скрипта php.

Мы планируем использовать memcached для кэширования этих объектов, однако он все равно будет вызывать кеш-сервер 10 раз (вместо того, чтобы вызывать базу данных 10 раз). использование memcache будет быстрее, но мы хотим вызвать кеш-сервер только один раз (вместо 10 раз)

Какой-нибудь фреймворк / модуль фреймворка Zend, который может помочь нам заархивировать какой-то локальный кеш? То, что если наш скрипт вызовет $modelUsers->fetchWithEmail('user@domain.com'), он войдет в память скрипта, пока выполнение скрипта не будет завершено (или функция обновления или удаления изменила значение этой строки в базе данных)

Ответы [ 2 ]

1 голос
/ 07 декабря 2011

Zend_Cache будет работать, и вы можете использовать Apc, Memcache, Flat файлы и т. Д.

1 голос
/ 07 декабря 2011

Doctrine ORM реализует EntityManager.

EntityManager API используется для управления постоянством ваших объектов и для запроса постоянных объектов.

http://www.doctrine -project.org / документы / ОРМ / 2,1 / ен / ссылка / architecture.html #-EntityManager

...