If your data is accessed by asynchronous Apex, it can’t be stored in a cache that is based on the user’s session.
The session cache isn’t available when an active session isn’t present, such as in asynchronous Apex or code called by asynchronous Apex. For example, if batch Apex causes an Apex trigger to execute, the session cache isn’t available in the trigger because the trigger runs in asynchronous context.
Use isAvailable() to determine whether the session cache is available for use.