Disclosure: This post includes affiliate links; I may receive compensation if you purchase products or services from the different links provided in this article.
image_credit - ByteByteGo
Hello friends, In System design, efficiency and speed are paramount and in order to enhance performance and reduce response times, caching plays an important role. If you don't know what is caching? let me give you a brief overview first
Caching is a technique that involves storing copies of frequently accessed data in a location that allows for quicker retrieval.
For example, you can cache the most visited page of your website inside a CDN (Content Delivery Network) or similarly a trading engine can cache symbol table while processing orders.
In the past, I have shared several system design interview articles like API Gateway vs load balancer, Forward Proxy vs Reverse Proxy as well common System Design problem and in this article we will explore the fundamentals of caching in system design and delves into different caching strategies that are essential knowledge for technical interviews.
It's also one of the essential System design topics or concepts for programmers to know.
By the way, if you are preparing for System design interviews and want to learn System Design in depth then you can also checkout sites like ByteByteGo, Design Guru, Exponent, Educative and Udemy which have many great System design courses
P.S. Keep reading until the end. I have a free bonus for you.
What is Caching in Software Design?
At its core, caching is a mechanism that stores copies of data in a location that can be accessed more quickly than the original source.
By keeping frequently accessed information readily available, systems can respond to user requests faster, improving overall performance and user experience.
In the context of system design, caching can occur at various levels, including:
Client-Side Caching
The client (user's device) stores copies of resources locally, such as images or scripts, to reduce the need for repeated requests to the server.Server-Side Caching
The server stores copies of responses to requests so that it can quickly provide the same response if the same request is made again.Database Caching
Frequently queried database results are stored in memory for faster retrieval, reducing the need to execute the same database queries repeatedly.
Here is a diagram which shows the client side and server side caching:
9 Caching Strategies for System Design Interviews
Understanding different caching strategies is crucial for acing technical interviews, especially for roles that involve designing scalable and performant systems. Here are some key caching strategies to know:
1. Least Recently Used (LRU)
This type of the cache is used to Removes the least recently used items first. You can easily implement this kind of cache by tracking the usage of each item and evicting the one that hasn't been used for the longest time.
If asked in interview, you can use doubly linked list to implement this kind of cache as shown in following diagram.
Though, in real world you don't need to create your own cache, you can use existing data structure like ConcurrentHashMap in Java for caching or other open source caching solution like EhCache.
2. Most Recently Used (MRU)
In this type of cache the most recently used item is removed first. Similar to LRU cache, it requires tracking the usage of each item and evicting the one that has been used most recently.
3. First-In-First-Out (FIFO)
This type of cache Evicts the oldest items first. If asked during interview, you can use use a queue data structure to maintain the order in which items were added to the cache.
4. Random Replacement
This type of cache randomly selects an item for eviction. While this type of cache is simpler to implement, but may not be optimal in all scenarios.
5. Write-Through Caching
In this type of caching, Data is written to both the cache and the underlying storage simultaneously. One advantage of this type of caching is that it ensures that the cache is always up-to-date.
On the flip side write latency is increased due to dual writes.
6. Write-Behind Caching (Write-Back)
In this type of caching, Data is written to the cache immediately, and the update to the underlying storage is deferred.
This also reduces write latency but the risk of data loss if the system fails before updates are written to the storage.
Here is how it works:
7. Cache-Aside (Lazy-Loading)
This means application code is responsible for loading data into the cache. It provides control over what data is cached but on the flip side it also requires additional logic to manage cache population.
Cache Invalidation
Along with caching and different caching strategies, this is another important concept which a Software engineer should be aware of.
Cache Invalidation removes or updates cache entries when the corresponding data in the underlying storage changes.
The biggest benefit of cache invalidation is that it ensures that cached data remains accurate, but at the same time it also introduces complexity in managing cache consistency.
And, here is a nice diagram from DeisgnGuru.io which explains various Cache Invalidation strategies for system design interviews
Global vs. Local Caching
In global caching, a single cache is shared across multiple instances. In local caching, each instance has its own cache. One of the advantage of Global caching is that it promotes data consistency and Local caching reduces contention and can improve performance.
System Design Interviews Resources:
And, here is the curated list of best system design books, online courses, and practice websites which you can check to better prepare for System design interviews. Most of these courses also answer questions I have shared here.
DesignGuru's Grokking System Design Course: An interactive learning platform with hands-on exercises and real-world scenarios to strengthen your system design skills.
"System Design Interview" by Alex Xu: This book provides an in-depth exploration of system design concepts, strategies, and interview preparation tips.
"Designing Data-Intensive Applications" by Martin Kleppmann: A comprehensive guide that covers the principles and practices for designing scalable and reliable systems.
LeetCode System Design Tag: LeetCode is a popular platform for technical interview preparation. The System Design tag on LeetCode includes a variety of questions to practice.
"System Design Primer" on GitHub: A curated list of resources, including articles, books, and videos, to help you prepare for system design interviews.
Educative's System Design Course: An interactive learning platform with hands-on exercises and real-world scenarios to strengthen your system design skills.
High Scalability Blog: A blog that features articles and case studies on the architecture of high-traffic websites and scalable systems.
YouTube Channels: Check out channels like "Gaurav Sen" and "Tech Dummies" for insightful videos on system design concepts and interview preparation.
ByteByteGo: A live book and course by Alex Xu for System design interview preparation. It contains all the content of System Design Interview book volume 1 and 2 and will be updated with volume 3 which is coming soon.
Exponent: A specialized site for interview prep especially for FAANG companies like Amazon and Google, They also have a great system design course and many other material which can help you crack FAANG interviews.
image_credit - ByteByteGo
Conclusion:
That's all about caching and different types of cache a Software engineer should know. As I said, Caching is a fundamental concept in system design, and a solid understanding of caching strategies is crucial for success in technical interviews.
Whether you're optimizing for speed, minimizing latency, or ensuring data consistency, choosing the right caching strategy depends on the specific requirements of the system you're designing.
As you prepare for technical interviews, delve into these caching strategies, understand their trade-offs, and be ready to apply this knowledge to real-world scenarios.
Bonus
As promised, here is the bonus for you, a free book. I just found a new free book to learn Distributed System Design, you can also read it here on Microsoft --- https://info.microsoft.com/rs/157-GQE-382/images/EN-CNTNT-eBook-DesigningDistributedSystems.pdf
Top comments (6)
I love this material, thank you and blessings
thanks, very happy that you liked it.
Correct me if I'm wrong. I think the list is a mixture of caching strategies and eviction strategies.
yes
Amazing article! @somadevtoo
I'm not really confident at system design but, this content is heavily nutritional.
Good Job!
Thank you for your effort