Шаблоны для очистки Zend Cache

Я начал использовать Zend Cache (бэкэнд APC), и все в порядке с точки зрения возврата кэшированных значений вместо того, чтобы каждый раз обращаться к базе данных. Однако вот моя проблема:

$cache_key = 'getrebates_'.$operator_code;

if(PP_Model_CacheService::exists($cache_key)) {
    $cached_values = PP_Model_CacheService::load($cache_key);
} else {
   //hits the db    
   $cached_values = $this->getAll($operator_code);
   PP_Model_CacheService::save($cached_values, $cache_key);
}
return $cached_values;

У каждого оператора есть свои собственные скидки, которые различаются между операторами, теперь, если я изменю базу данных и мне нужно очистить скидки для всех операторов, как мне это сделать?

Я могу использовать $ Cache-> clean () , но это очистит другие кеши (а не только кеш скидок для каждого оператора). Если я пропущу все операторы:

foreach($operator_codes AS $operator_code) {
   $cache_key = 'getrebates_'.$operator_code;
   $cache->delete($cache_key)
}

Похоже, для кеша будет много работы. Есть ли способ очистить только часть кеша. ([some_id] [smallint] NOT NULL, [order_seq] [smallint] NOT NULL, - и т. д ... ) Оба ...

У меня есть таблица с составным первичным ключом, устроенная примерно так:

CREATE TABLE [dbo].[mytable]
(
    [some_id] [smallint] NOT NULL,
    [order_seq] [smallint] NOT NULL,
    -- etc...
)

Оба этих столбца являются частью первичного ключа (на самом деле это ПК из 4 частей в реальной таблице, но Я упростил его для примера). Ни одна из колонок не идентичны. Я пишу хранимую процедуру, которая вставляет новую запись в следующий order_seq для данного some_id :

CREATE PROCEDURE some_proc
(
    @some_id smallint,
    @newSeq smallint OUTPUT
)
AS
BEGIN
    insert into mytable (some_id, order_seq)
    values 
    (
         @some_id, 
         (select max(order_seq) + 1 from mytable where some_id = @some_id)
    )

    set @newSeq = /* order_seq of the newly-inserted row */
END

Мне нужно знать, как установить @newSeq. Я бы хотел избежать выполнения запроса выбора после вставки, потому что я не хочу сталкиваться с проблемами параллелизма - мне запрещено блокировать таблицу или использовать транзакцию (не спрашивайте).

Насколько мне известно, я не могу использовать SCOPE_IDENTITY () , потому что ни один из столбцов не является идентификатором. Как мне правильно установить newSeq ?

6
задан Justin Morgan 29 April 2011 в 04:09
поделиться