Application level (or layer) caching means storing reusable data temporarily inside your infrastructure, but not in the main database. This can be in the memory of your application or web servers, but with multiple servers, this tends to be in a distributed in-memory store such as Memcached or Redis.
You can, of course, use both in-memory stores on your web servers and a centralized cache. However, if you have multiple web servers, then you will need a way to synchronize the caches. You can use publish/subscribe (pub/sub) messaging for this, which we will cover later in this chapter.
The following diagram shows a simple centralized caching setup. In a real situation, you will probably have multiple clustered cache ...