APCu TTL не работает php 7.0

#php #caching #apcu

#php #кэширование #apcu

Вопрос:

Указав TTL, элемент должен быть удален из кэша. Но это не работает. Это очень, очень просто. время TTL установлено равным 1 секунде. Я допустил ошибку?

Моя версия;

 PHP 7.0.12-1 deb.sury.org~xenial 1 (cli) ( NTS )
Copyright (c) 1997-2016 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2016 Zend Technologies
    with Zend OPcache v7.0.12-1 deb.sury.org~xenial 1, Copyright (c) 1999-2016, by Zend Technologies
  

Мой скрипт;

 cat apcu.php
<?php

$key="KEY";

function xxx($key) {
  if (apcu_exists($key)) {
    print ("In Storen");
    $value = apcu_fetch($key);
    var_dump($value);
  } else {
    $value = "Hello Big Daddy";
    apcu_add($key, $value, 1);
    print ("Not in store, addingn");
  }
}

xxx($key);
sleep(2);
xxx($key);
sleep(3);
xxx($key);
  

Вывод;

 php apcu.php
Not in store, adding
In Store
string(15) "Hello Big Daddy"
In Store
string(15) "Hello Big Daddy"
  

Я не думаю, что элемент должен быть в кэше при втором вызове.

Но даже если кто-то сказал, что это должно быть, то это, безусловно, не должно быть в кэше при третьем вызове.

Ответ №1:

Когда для apc.use_request_time установлено значение true, которое используется по умолчанию, происходит вот что — для вычислений TTL используется время начала запроса SAPI, а не время вызова каждой функции.