
Caches are sexy. They are a one-night stand. We need to avoid them in a long-term relationship.
TL;DR: Any junior student can create a cache. Almost no senior developer can debug and invalidate them.
Problems
Coupling
Testability
Cache invalidation.
Maintainability
Premature Optimization
Erratic Behavior
Lack of transparency
Non-Deterministic behavior
Solutions
If you have a conclusive benchmark and are willing to pay for some coupling: Put an object in the middle.
Unit test all your invalidation scenarios. Experience shows we face them in an incremental way.
Look for a real world cache metaphor and model it.
Sample Code
Wrong
Right
Detection
This is a design smell.
It will be difficult to enforce by policy.
Tags
- Premature Optimization
Conclusion
Caches should be functional and intelligent
In this way we can manage invalidation.
General purpose caches are suitable only for low level objects like operating systems, files and streams.
We shouldn't cache domain objects.
This page is hosted on a cached website.
Relations
More Info
Credits
Photo by Aimee Vogelsang on Unsplash
There are only two hard things in Computer Science: cache invalidation and naming things.
Phil Karlton
This article is part of the CodeSmell Series.
About the author
I’m a senior software engineer loving clean code, and declarative designs. S.O.L.I.D. and agile methodologies fan.
Comments
Join the discussionHey Maxi, love all the series about the Code smell :-).
Just a curious about this line
return $this->inbox->retrieveAndRemove($title);
Here, we retrieve the title from cache and remove it immediately? Why do we retrieve and remove? Wouldn't it increase the write-to-cache ratio by deleting cache quite often :-) ? whats your thoughts on that?
It is about the real life metaphore on retrieving an existing copy (and using it) If you have fungible objects (A real life book is not) you could just retrieve it and keep it. It is like aquiring a lock in this case
Code Smells
In this series, we will see several symptoms and situations that make us doubt the quality of our developments. We will present possible solutions. Most are just clues. They are no hard rules.





