It sounds like you're imagining that three threads "T1", "T2", "T3" all have their own copy of workerCache
that they need to keep in sync. Is this right?
If so, I would say that's a problem. Instead of three caches (one for each thread), how about one cache shared between all threads?
That way, everybody sees the same data all the time b/c there's only one copy of the data (since there is only one cache). If you invalidate an entry from T1 then everybody "sees" that invalidation at the same time -- as a consequence of there being only one cache.
If you have three threads all updating the same key, then the last one into the cache wins. I'm not sure if that's an issue for you or not.
Am I anywhere approaching the problem?