added the lru cache, implemented based on LinkedHashMap