docs: def get(self, key, default=Empty, creator=Empty, expire=None):
          """
          :para default: if default is callable then invoke it, save it and return it
          """
          try:
              return self.storage.get(key)
          except KeyError as e:
              if creator is not Empty:
                  if callable(creator):
                      v = creator()
                  else:
                      v = creator
                  self.set(key, v, expire)
                  return v
              else:
                  if default is not Empty:
                      if callable(default):
                          v = default()
                          return v
                      return default
                  else:
                      raise