Я начал использовать 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
?