When a user or process other than the current user session updates the completion information for a logged in user, that information will not be presented to the user until the cache expires or they logout and log back in.
LTI is an example of this;
- You set LTI view and grade completion.
- Step through the LTI item and it will call a webservice to moodle to mark the completion information.
- The web services uses a different SESSION than the currently logged in user. As a result the cache is not updated even though the grade_update will look to see if it should update the cache.
The LTI case can be generalized to any process that is outside the users sessions that updates the completion data.
The only solution I can see as a viable option is to move this to an application cache across the entire of Moodle using MUC. That way the cache can be updated from any session and it can be long lived. I do not however understand the benefit of the cache and what performance issues it's solving.