code: async def get(self, key, param=None, extend_herd_timeout=None):
          
          identity = self._gen_identity(key, param)
          res = await self.client.get(identity)
          if res:
              res, timeout = self._unpack(res)
              now = int(time.time())
              if timeout <= now:
                  extend_timeout = extend_herd_timeout or self.extend_herd_timeout
                  expected_expired_ts = now + extend_timeout
                  value = self._pack([res, expected_expired_ts])
                  await self.client.set(identity, value, extend_timeout)
                  return None
          return res
docs: Use key or identity generate from key and param to
          get cached content and expire time.
          Compare expire time with time.now(), return None and
          set cache with extended timeout if cache is expired,
          else, return unpacked content