A generic caching utility, if you want to add more implementations. Just implement.