using DictMixin, implement caching