Added cache eviction param
Change-Id: Ibd2c1351973f710927ecf2909d73a6fe7d3404e4 Signed-off-by: smarcet <smarcet@gmail.com>
This commit is contained in:
parent
2e2050cdea
commit
6e290a5712
@ -50,60 +50,62 @@ final class CacheMiddleware
|
|||||||
*/
|
*/
|
||||||
public function handle($request, Closure $next, $cache_lifetime)
|
public function handle($request, Closure $next, $cache_lifetime)
|
||||||
{
|
{
|
||||||
Log::debug('cache middleware invoked ...');
|
Log::debug('CacheMiddleware::handle');
|
||||||
$cache_lifetime = intval($cache_lifetime);
|
$cache_lifetime = intval($cache_lifetime);
|
||||||
if ($request->getMethod() !== 'GET')
|
if ($request->getMethod() !== 'GET') {
|
||||||
{
|
|
||||||
// short circuit
|
// short circuit
|
||||||
|
Log::debug('CacheMiddleware::handle method is not GET');
|
||||||
return $next($request);
|
return $next($request);
|
||||||
}
|
}
|
||||||
|
|
||||||
$key = $request->getPathInfo();
|
$key = $request->getPathInfo();
|
||||||
$query = $request->getQueryString();
|
$query = $request->getQueryString();
|
||||||
$current_time = time();
|
$current_time = time();
|
||||||
|
$evict_cache = false;
|
||||||
if(!empty($query))
|
if (!empty($query)) {
|
||||||
{
|
Log::debug(sprintf('CacheMiddleware::handle query %s', $query));
|
||||||
$query = explode('&', $query);
|
$query = explode('&', $query);
|
||||||
foreach($query as $q)
|
foreach ($query as $q) {
|
||||||
{
|
$q = explode('=', $q);
|
||||||
$q = explode('=',$q);
|
if(strtolower($q[0]) === "evict_cache"){
|
||||||
if(strtolower($q[0]) === 'q'|| strtolower($q[0]) === 'access_token'|| strtolower($q[0]) === 'token_type' ) continue;
|
if(strtolower($q[1]) === '1') {
|
||||||
$key .= ".".implode("=",$q);
|
Log::debug('CacheMiddleware::handle cache will be evicted');
|
||||||
|
$evict_cache = true;
|
||||||
|
}
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (strtolower($q[0]) === 'q' || strtolower($q[0]) === 'access_token' || strtolower($q[0]) === 'token_type') continue;
|
||||||
|
$key .= "." . implode("=", $q);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (str_contains($request->getPathInfo(), '/me'))
|
if (str_contains($request->getPathInfo(), '/me')) {
|
||||||
{
|
|
||||||
$current_member = $this->context->getCurrentUser();
|
$current_member = $this->context->getCurrentUser();
|
||||||
if(!is_null($current_member))
|
if (!is_null($current_member))
|
||||||
$key .= ':' .$current_member->getId();
|
$key .= ':' . $current_member->getId();
|
||||||
}
|
}
|
||||||
|
|
||||||
$data = $this->cache_service->getSingleValue($key);
|
$data = $this->cache_service->getSingleValue($key);
|
||||||
$time = $this->cache_service->getSingleValue($key.".generated");
|
$time = $this->cache_service->getSingleValue($key . ".generated");
|
||||||
|
|
||||||
if (empty($data) || empty($time))
|
if (empty($data) || empty($time) || $evict_cache) {
|
||||||
{
|
|
||||||
$time = $current_time;
|
$time = $current_time;
|
||||||
Log::debug(sprintf("cache value not found for key %s , getting from api...", $key));
|
Log::debug(sprintf("CacheMiddleware::handle cache value not found for key %s , getting from api...", $key));
|
||||||
// normal flow ...
|
// normal flow ...
|
||||||
$response = $next($request);
|
$response = $next($request);
|
||||||
if ($response instanceof JsonResponse && $response->getStatusCode() === 200)
|
if ($response instanceof JsonResponse && $response->getStatusCode() === 200) {
|
||||||
{
|
|
||||||
// and if its json, store it on cache ...
|
// and if its json, store it on cache ...
|
||||||
$data = $response->getData(true);
|
$data = $response->getData(true);
|
||||||
$this->cache_service->setSingleValue($key, gzdeflate(json_encode($data), 9), $cache_lifetime);
|
$this->cache_service->setSingleValue($key, gzdeflate(json_encode($data), 9), $cache_lifetime);
|
||||||
$this->cache_service->setSingleValue($key.".generated", $time, $cache_lifetime);
|
$this->cache_service->setSingleValue($key . ".generated", $time, $cache_lifetime);
|
||||||
}
|
}
|
||||||
}
|
} else {
|
||||||
else
|
|
||||||
{
|
|
||||||
$ttl = $this->cache_service->ttl($key);
|
$ttl = $this->cache_service->ttl($key);
|
||||||
// cache hit ...
|
// cache hit ...
|
||||||
Log::debug(sprintf("cache hit for %s - ttl %s ...", $key, $ttl));
|
Log::debug(sprintf("CacheMiddleware::handle cache hit for %s - ttl %s ...", $key, $ttl));
|
||||||
$response = new JsonResponse(json_decode(gzinflate($data), true), 200, [
|
$response = new JsonResponse(json_decode(gzinflate($data), true), 200, [
|
||||||
'content-type' => 'application/json',
|
'content-type' => 'application/json',
|
||||||
]
|
]
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user