added abstract cache class