Simple SHM-это небольшой уровень абстракции для использования PHP для управления общей памятью, который поддерживает простое управление сегментами памяти объектно-ориентированным способом. При написании небольших приложений, использующих общую память для хранения, эта библиотека помогает создавать очень сжатый код. Для этого есть три способа: чтение, запись и удаление. Простое создание экземпляра объекта из этого класса может управлять открытым сегментом общей памяти.
Объект класса и тестовый код
assertInstanceOf('Simple\SHM\Block', $memory);
$memory->write('Sample');
$data = $memory->read();
$this->assertEquals('Sample', $data);
}
public function testIsCreatingNewBlockWithId()
{
$memory = new Block(897);
$this->assertInstanceOf('Simple\SHM\Block', $memory);
$this->assertEquals(897, $memory->getId());
$memory->write('Sample 2');
$data = $memory->read();
$this->assertEquals('Sample 2', $data);
}
public function testIsMarkingBlockForDeletion()
{
$memory = new Block(897);
$memory->delete();
$data = $memory->read();
$this->assertEquals('Sample 2', $data);
}
public function testIsPersistingNewBlockWithoutId()
{
$memory = new Block;
$this->assertInstanceOf('Simple\SHM\Block', $memory);
$memory->write('Sample 3');
unset($memory);
$memory = new Block;
$data = $memory->read();
$this->assertEquals('Sample 3', $data);
}
}Дополнительные примечания
write('Sample');
echo $memory->read();
?>Обратите внимание, что в приведенном выше коде для этого класса не передается идентификатор. Если идентификатор не передается, он случайным образом выбирает номер и открывает новый сегмент памяти для этого номера. Мы можем передать число в качестве параметра конструктору, чтобы открыть существующий сегмент памяти, или создать сегмент памяти с определенным идентификатором, следующим образом
write('Sample');
echo $new->read();
?>Волшебный метод _destructor отвечает за вызов shmop_close в сегменте памяти для отмены объекта настройки, чтобы отделить его от сегмента памяти. Мы называем это “Простой SHM 101”. Теперь давайте используем этот метод для более продвинутой цели: использования общей памяти в качестве хранилища. Хранение наборов данных требует сериализации, поскольку массивы или объекты не могут храниться в памяти. Хотя здесь для сериализации используется JSON, достаточно любого другого метода (например, XML или встроенных возможностей сериализации PHP). следующим образом
'John',
'password' => '123456',
'posts' => array('My name is John', 'My name is not John')
);
$data = json_encode($results);
$memory = new SimpleSHM;
$memory->write($data);
$storedarray = json_decode($memory->read());
print_r($storedarray);
?>Мы успешно сериализуем массив в строку JSON, сохраняем его в блоке общей памяти, считываем из него данные, десериализуем строку JSON и отображаем сохраненный массив. Это может показаться простым, но представьте себе возможности этого фрагмента кода. Вы можете использовать его для хранения результатов запросов веб-служб, запросов к базе данных или даже кэша ядра шаблонов. Чтение и запись в память обеспечат более высокую производительность, чем чтение и запись на диск.
Использование этой технологии хранения полезно не только для кэширования, но и для обмена данными между приложениями, если данные хранятся в формате, удобном для чтения с обоих концов. Не стоит недооценивать возможности общей памяти в веб-приложениях. Существует множество различных способов гениальной реализации этого хранилища, единственным ограничением являются творческие способности и навыки разработчиков.