A cache is a fast store, usually memory, that keeps copies of data so you do not have to fetch it from a slower place every time. The slower place is called the source. It is often a database, but it can be another service.
In a read-through cache, your application only ever asks the cache. If the cache has the value, that is a hit and it returns it at once. If it does not, that is a miss. On a miss the cache itself calls a function you gave it, called the loader. The loader reads the value from the source. The cache stores it, then hands it back.
So the application has one rule: ask the cache. It does not need to know where the data really lives, or what to do on a miss. That job belongs to the cache and its loader.
Each stored value also gets a time to live, or TTL. That is how long the cache trusts the value before it throws it away and loads it again.