While the cache key must be robust and meaningful enough to uniquely identify a particular result set, the underlying architecture of your caching scheme is essential for paginated result sets whose ordering or properties can change. It is important to separate the cacheable components from the non-cacheable components of your system and store them in different layers. This way you can avoid having to invalidate the entire cached result set when just some of its paginated items changes while at the same time ensuring quick access times due to cached data. If needed, take advantage of distributed caching solutions like Memcached or Redis which allow easy invalidation across multiple nodes, providing granular control over changing portions of your results set. Additionally, if desired, consider adding expiration times on portions of specific results sets so that resources are always up-to-date.