@API.register<EOL><INDENT>@API.aiocache_enabled(fake_return=True)<EOL>@API.timeout<EOL>@API.plugins<EOL>async def multi_set(self, pairs, ttl=SENTINEL, dumps_fn=None, namespace=None, _conn=None):<DEDENT>
start = time.monotonic()<EOL>dumps = dumps_fn or self._serializer.dumps<EOL>tmp_pairs = []<EOL>for key, value in pairs:<EOL><INDENT>tmp_pairs.append((self.build_key(key, namespace=namespace), dumps(value)))<EOL><DEDENT>await self._multi_set(tmp_pairs, ttl=self._get_ttl(ttl), _conn=_conn)<EOL>logger.debug(<EOL>"<STR_LIT>",<EOL>[key for key, value in tmp_pairs],<EOL>len(pairs),<EOL>time.monotonic() - start,<EOL>)<EOL>return True<EOL>
Stores multiple values in the given keys.

:param pairs: list of two element iterables. First is key and second is value
:param ttl: int the expiration time in seconds. Due to memcached
    restrictions if you want compatibility use int. In case you
    need miliseconds, redis and memory support float ttls
:param dumps_fn: callable alternative to use as dumps function
:param namespace: str alternative namespace to use
:param timeout: int or float in seconds specifying maximum timeout
    for the operations to last
:returns: True
:raises: :class:`asyncio.TimeoutError` if it lasts more than self.timeout