implemented perpetual cache entries

these use a function to recompute the value on expiry
instead of flushing the entry from cache