add cache to readdata