This is what the previous comment (fake set multi):
https://github.com/php-memcached-dev/php-memcached/blob/master/php_memcached.c#L1219
(PECL memcached >= 0.1.0)
Memcached::setMulti — Сохраняет несколько записей
Метод Memcached::setMulti() похож на метод
Memcached::set(), но вместо одной пары ключ и значение,
работает с несколькими записями, которые передали в параметр items
в виде массива.
Параметр expiration
, который устанавливает срок хранения записи, применяется ко
всем записям.
items
Массив пар ключей и значений для хранения на сервере.
expiration
Время хранения объекта, по умолчанию равно 0. Подробнее об этом рассказывает раздел «Время хранения объекта».
Функция возвращает true
, если выполнилась успешно, или false
, если возникла ошибка.
Вызывайте метод
Memcached::getResultCode(), если требуется.
Пример #1 Пример использования метода Memcached::setMulti()
<?php
$m = new Memcached();
$m->addServer('localhost', 11211);
$items = array(
'key1' => 'value1',
'key2' => 'value2',
'key3' => 'value3'
);
$m->setMulti($items, time() + 300);
?>
This is what the previous comment (fake set multi):
https://github.com/php-memcached-dev/php-memcached/blob/master/php_memcached.c#L1219
The previous comment is from April 2013, it has a link pointing on current master, so things are changed since 2013 in the source code.
Maybe the right link is
https://github.com/php-memcached-dev/php-memcached/blob/80cb21467a1db6b7b18725df586f11801c823695/php_memcached.c#L1219
By the way, can someone skilled in C confirm the "fake setMulti" problem?
Dont expect setmulti is faster then multiple SETs!
It doesn't use the setmulti lib function, it iterats over every key and send him alone.
I can't find any php implementation with setmulti support (needs support for memcached's binary protocol, remember php's "memcache"-extension only supports text-protocol).
Thats bad, not enought throughput to membase.
So i have to use redis instead, coz of its support for get/set multi.
As of Feb 2025 Memcached::setMulti still iterates the collection internally and calls memcached_set or memcached_set_by_key rather than the underlying setmulti method, which is only supported in the binary protocol.
As noted by jooonic, performance is unlikely to be much better than iterating yourself in PHP.
https://github.com/php-memcached-dev/php-memcached/blob/80cb21467a1db6b7b18725df586f11801c823695/php_memcached.c#L1219