public function setMulti(array $items, $expire = 0)
{
$ttl = $this->ttl($expire);
// negative TTLs don't always seem to properly treat the key as deleted
if ($ttl < 0) {
$this->deleteMulti(array_keys($items));
return array_fill_keys(array_keys($items), true);
}
// attempt to get locks for all items
$locked = $this->lock(array_keys($items));
$locked = array_fill_keys($locked, null);
$failed = array_diff_key($items, $locked);
$items = array_intersect_key($items, $locked);
if ($items) {
// only write to those where lock was acquired
$this->apcu_store($items, null, $ttl);
$this->expire(array_keys($items), $ttl);
$this->unlock(array_keys($items));
}
$return = array();
foreach ($items as $key => $value) {
$return[$key] = !array_key_exists($key, $failed);
}
return $return;
}