In computer science, a small amount of storage used to store recently used elements of a larger amount of storage in the hope that the time to access a data element is reduced.

The two rules in computer science:
1) If too slow, use caching
2) For flexibility/utilization, use indirection