treat cache as threadlocal