Cache-aside checks the cache, loads from the system of record on a miss and stores a bounded copy.
What It Does and When to Use It
Load through the repository only on cache miss; a real backend must also enforce TTL. APCu stores local application data, Redis is external and can be shared among hosts, and OPcache stores compiled code.
Requirements, Inputs and Expected Behavior
Confirm the runtime, extension, environment variables, and permissions before running the examples in production. Distinguish a cached null from a miss and invalidate entries after writes.
Example 1: Basic Operation
Load through the repository only on cache miss; a real backend must also enforce TTL.
<?php
$cache=[];
function readArticle(int $id,array &$cache,callable $load): array {
$key='article:v1:'.$id;
if (!array_key_exists($key,$cache)) $cache[$key]=$load($id);
return $cache[$key];
}
$load=static fn(int $id)=>['id'=>$id,'title'=>'Guide'];
print_r(readArticle(9,$cache,$load));
Example 2: Behavior and Validation
Invalidate a changed item after successful database update.
<?php
$cache=['article:v1:3'=>['title'=>'Old']];
$id=3; unset($cache['article:v1:'.$id]);
echo isset($cache['article:v1:3'])?'Stale':'Invalidated';
Practical Example: Application Use
Distinguish a cached miss (null) from a key that is absent.
<?php
$cache=['article:v1:2'=>null];
$key='article:v1:2';
var_dump(array_key_exists($key,$cache));
Important Behavior and Edge Cases
The second example highlights: Invalidate a changed item after successful database update. The practical example adds: Distinguish a cached miss (null) from a key that is absent.
Comparison with Related Approaches
| Approach | What changes |
|---|---|
| APCu versus Redis and OPcache | APCu stores local application data, Redis is external and can be shared among hosts, and OPcache stores compiled code. |
| Choosing safely | Define TTL, invalidation, and concurrency behavior separately from the cache storage API. |
Common Beginner Mistakes
| Mistake | Correct approach |
|---|---|
| Assuming a cache is shared across multiple servers | Confirm process- and host-level cache scope; use a distributed store when needed. |
| Never invalidating cached data | Set a TTL or versioned cache key and test release-time invalidation. |
| Skipping operational constraints | Distinguish a cached null from a miss and invalidate entries after writes. |
Key Takeaways
- Cache-aside checks the cache, loads from the system of record on a miss and stores a bounded copy.
- Distinguish a cached miss (null) from a key that is absent.
- Define TTL, invalidation, and concurrency behavior separately from the cache storage API.