11<?php namespace App \Http \Middleware ;
22
3- use App \Utils \Cache \MemCache ;
43use Closure ;
54use Illuminate \Http \JsonResponse ;
65use Illuminate \Support \Facades \Cache ;
@@ -88,82 +87,49 @@ public function handle($request, Closure $next, $cache_lifetime, $cache_region =
8887 }
8988 }
9089 $ status = 200 ;
91- $ wasMemCacheHit = false ;
9290 $ wasHit = false ;
93- $ data = null ;
94-
9591 if ($ regionTag ) {
9692 Log::debug ("CacheMiddleware: using region tag {$ regionTag } ip {$ ip } agent {$ agent }" );
97- // try L1 APC
98- $ encoded = MemCache::get ($ key );
99- $ wasMemCacheHit = $ encoded !== null ;
100- if ($ wasMemCacheHit ){
101- Log::debug ("CacheMiddleware:: MemcCache Hit " );
102- }
103- if (!$ wasMemCacheHit ) {
104- // then L2 Redis
105- $ wasHit = Cache::tags ($ regionTag )->has ($ key );
106- Log::debug ($ wasHit ? "CacheMiddleware: cache HIT Redis (tagged) " : "CacheMiddleware: cache MISS (tagged) " , [
107- 'tag ' => $ regionTag ,
108- 'ip ' => $ ip ,
109- 'agent ' => $ agent ,
110- 'key ' => $ key ,
111- ]);
112-
113- $ encoded = Cache::tags ($ regionTag )
114- ->remember ($ key , $ cache_lifetime , function () use ($ next , $ request , $ regionTag , $ key , $ cache_lifetime , &$ status , $ ip , $ agent ) {
115- $ resp = $ next ($ request );
116- if ($ resp instanceof JsonResponse) {
117- $ status = $ resp ->getStatusCode ();
118- if ($ status === 200 ) {
119- return $ this ->encode ($ resp ->getData (true ));
120- }
121- }
122- // don’t cache non-200 or non-JSON
123- return Cache::get ($ key );
124- });
125-
126-
127- // backfill APC only if we actually have a value
128- if ($ encoded !== null ) { // avoid null writes
129- MemCache::put ($ key , $ encoded , $ cache_lifetime , $ regionTag );
130- }
131- }
132- $ data = $ this ->decode ($ encoded );
133- } else {
134- // try L1 APC
135- $ encoded = MemCache::get ($ key );
136- $ wasMemCacheHit = !is_null ($ encoded );
137- if ($ wasMemCacheHit ){
138- Log::debug ("CacheMiddleware:: MemcCache Hit " );
139- }
140- if (!$ wasMemCacheHit ) {
141- // then L2 Redis
142-
143- $ wasHit = Cache::has ($ key );
144-
145- Log::debug ($ wasHit ? "CacheMiddleware: cache HIT " : "CacheMiddleware: cache MISS " , [
146- 'ip ' => $ ip ,
147- 'agent ' => $ agent ,
148- 'key ' => $ key ,
149- ]);
150-
151- $ encoded = Cache::remember ($ key , $ cache_lifetime , function () use ($ next , $ request , $ key , &$ status , $ ip , $ agent ) {
93+ $ wasHit = Cache::tags ($ regionTag )->has ($ key );
94+ Log::debug ($ wasHit ? "CacheMiddleware: cache HIT (tagged) " : "CacheMiddleware: cache MISS (tagged) " , [
95+ 'tag ' => $ regionTag ,
96+ 'ip ' => $ ip ,
97+ 'agent ' => $ agent ,
98+ 'key ' => $ key ,
99+ ]);
100+
101+ $ encoded = Cache::tags ($ regionTag )
102+ ->remember ($ key , $ cache_lifetime , function () use ($ next , $ request , $ regionTag , $ key , $ cache_lifetime , &$ status ,$ ip , $ agent ) {
152103 $ resp = $ next ($ request );
153104 if ($ resp instanceof JsonResponse) {
154105 $ status = $ resp ->getStatusCode ();
155- if ($ status === 200 )
106+ if ($ status === 200 ) {
156107 return $ this ->encode ($ resp ->getData (true ));
108+ }
157109 }
110+ // don’t cache non-200 or non-JSON
158111 return Cache::get ($ key );
159112 });
160- // store at APC
161- if ($ encoded !== null ) { // avoid null writes
162- MemCache::put ($ key , $ encoded , $ cache_lifetime );
113+ $ data = $ this ->decode ($ encoded );
114+ } else {
115+ $ wasHit = Cache::has ($ key );
116+
117+ Log::debug ($ wasHit ? "CacheMiddleware: cache HIT " : "CacheMiddleware: cache MISS " , [
118+ 'ip ' => $ ip ,
119+ 'agent ' => $ agent ,
120+ 'key ' => $ key ,
121+ ]);
122+
123+ $ encoded = Cache::remember ($ key , $ cache_lifetime , function () use ($ next , $ request , $ key , &$ status , $ ip , $ agent ) {
124+ $ resp = $ next ($ request );
125+ if ($ resp instanceof JsonResponse) {
126+ $ status = $ resp ->getStatusCode ();
127+ if ($ status === 200 )
128+ return $ this ->encode ($ resp ->getData (true ));
163129 }
164-
165- $ data = $ this -> decode ( $ encoded );
166- }
130+ return Cache:: get ( $ key );
131+ } );
132+ $ data = $ this -> decode ( $ encoded );
167133 }
168134 // safe guard
169135 if ($ data === null ) $ data = is_array ($ encoded ) ? $ encoded : [];
@@ -177,7 +143,7 @@ public function handle($request, Closure $next, $cache_lifetime, $cache_region =
177143 $ response ->headers ->addCacheControlDirective ('must-revalidate ' , true );
178144 $ response ->headers ->addCacheControlDirective ('proxy-revalidate ' , true );
179145 $ response ->headers ->add ([
180- 'X-Cache-Result ' => $ wasMemCacheHit ? ' HIT MemcCache ' : ( $ wasHit ? 'HIT REDIS ' : 'MISS ' ) ,
146+ 'X-Cache-Result ' => $ wasHit ? 'HIT ' : 'MISS ' ,
181147 ]);
182148 Log::debug ( "CacheMiddleware: returning response " , [
183149 'ip ' => $ ip ,
0 commit comments