Unique or not unique depends on the key used to stored the information in the Q2 cache. When information is stored in cache, a cache key is needed to pair with the information stored. You can see in the cache section of the online banking tutorial that the the this is done with the self.cache.set function
self.cache.set('key', 'value', 15)
The 'key' is a string value that the key to pair with the information.
Since it is a string, a key that is unique to the end user can be constructed to make it unique to the current user. For example:
user_cache_key = f'info_{self.online_user.user_id}'
self.cache.set(user_cache_key, 'value', 15)
This could create the cache key "info_2" for the end user with user id 2. The login name could also be used and is also unique to each end user.
The SDK team is also about to release a new feature that will allow for caching on a per online session basis. This would allow for state to be saved for a unique end user and only durring their current session.