Single blog// see post details
How to manage a cache
Caching is definitely one of the most important parts of modern software. It can be the difference between a small script and full blown software. However, a great deal of people are perplexed by this concept when it first presents itself. In this article, I’ll discuss what caching is and how to manage a cache.
I’m sure we’ve all had to clear our browser cache once or twice. What is the cache? Why does it exist and what purpose does it serve? Simply put, a cache is a set of data that is used most frequently. It takes time to go and retrieve data from the server every single time the software needs it. Thus, a cache is a set of data saved by the software for quick access. As an example, a web browser will “cache”, or save, your most frequently visited websites to your computer so that you can go through and browse much more quickly. On the other side, the websites themselves typically keep a cache. Commonly, websites have to request information from MySQL databases upwards of hundreds of times per hour. Retrieving that information and saving it somewhere quick and easily accessible will increase the website speed tenfold.
Popular Content Management Systems like Magento have caches built in. There are multiple bottlenecks to webhosting, one of which is the server upload speed. Another bottleneck is calculation. Commonly, larger and more complex websites have to run scripts to determine what should be displayed. This is much more complicated than a simple HTML website, which basically just needs to be uploaded to the client. By running the calculations and storing results before answering a request, Magento and WordPress can save time by accessing the stored data, or the “cache”.
How does this apply to your software? We’ll use iOS as an example in this case, because that’s what I have the most experience with in caching. Many iOS apps fall into the “Client” category in the “Server/Client model”. Due to that fact, many apps end up requesting data from server software. There’s no guarantee that the app will be connected to the server 24/7, so it’s common and convenient to pull the required data and store it for later use. This presents a few problems. Here are the core problems to solve with caching:
This problem can be solved, at least in iOS, by letting the user control when the cache should be refreshed. One popular way to do this is to allow the user to “drag down” on the screen to refresh. You can see an example of this in many built-in apps such as the Mail app, Messages, and others.
This next problem can be solved by setting up all data to be stored regardless of whether it should be cached or not. Below, you can see my method of storing basic user data or settings in iOS.
@interface PAUserObject : NSObject + (void)syncDataSetWithDefaults:(PAUserObject *)userObject completion:(CompletionBlock)completion; + (PAUserObject *)fetchDataSetFromDefaults; + (void)deleteDataSetFromDefaults; + (void)printObject:(PAUserObject *)userObject; + (void)refreshCachedData; @property (strong, nonatomic) NSString *sessionId; @property (strong, nonatomic) NSString *username; @property (strong, nonatomic) NSString *firstName; @property (strong, nonatomic) NSString *lastName; @end
Next, I’ll review each function and how it pertains to caching.
If it’s unnecessary to actually retain a cache of data, simply place a call to deleteDataSetFromDefaults at the top of fetchDataSetFromDefaults. Another option would be to make the call to the API regardless of whether the NSUserDefaults object exists or not. After making the call, the API class will overwrite the contents of the NSUserDefaults at the given key, and will be accessed and returned as it normally would. That way, if caching is necessary, the model is already configured and engineered appropriately to support it.
In summary, caching is a very important part of software engineering. Understanding how it works and what it’s for is an invaluable piece of information. Just remember to set it up as efficiently as possible. Knowing when to clear the cache is tricky, and can’t possibly be explained. It’s something you’ll have to decide based on a combination of your own personal style and the needs of the software. If done correctly, though, changing how often it’s refreshed can be modified very easily. Just remember, everything should be as scalable and standardized as possible.