One powerful way to deal with these problems is event sourcing. It's a reasonably elegant way to materialize a single application-specific cache based on many different data sources. Two great resources:
https://engineering.linkedin.com/distributed-systems/log-wha...