PHP 的自帶記憶體共享 APCu 和 shm

不忘初心發表於2019-07-24

APCu

  • 擴充套件下載地址:http://pecl.php.net/package/APCu
  • php.ini需要配置:
    extension=php_apcu.dll
    apc.enabled=1
    apc.shm_size=32M
    apc.enable_cli=1
    具體配置可檢視http://php.net/manual/zh/apcu.configuration.php

相關文章:
https://support.cloud.engineyard.com/hc/en...

<?php
class APCu
{
    public static function get($key)
    {
        return json_decode(apcu_fetch($key), true);
    }

    public static function set($key, $data, $ttl)
    {
        return apcu_store($key, json_encode($data), $ttl);
    }
}

if (PHP_SAPI == 'cli' || !function_exists('apcu_store')) {
    //不要鬧啦 上面說了不支援 cli 模式 和 必須支援APCu擴充套件的快取
    return;
}
var_dump(Apcu::get("TEST"));
Apcu::set("TEST", ["key" => "value"], 10);
var_dump(Apcu::get("TEST2"));

shm

相關文章:
http://www.laruence.com/2008/04/21/101.htm...

<?php

//使用訊號量擴充套件共享記憶體
$key = ftok(__FILE__, 'a');

$share_key = 1;
//建立一個共享記憶體,大小為1024位元組,許可權為755$
$shm_id = shm_attach($key, 1024, 0755);

var_dump($shm_id);
//將一個key=>value放進共享記憶體
$message1 = "你好啊1";
shm_put_var($shm_id, $share_key, $message1);
//重複使用key ,前一個設定的值會被後一個設定的值覆蓋掉。
$message2 = "你好啊2";
shm_put_var($shm_id, $share_key, $message2);

//讀取一個共享記憶體值
$read_message = shm_get_var($shm_id, $share_key);
echo $read_message . PHP_EOL;
//並不是取走了,而是讀取
$read_message2 = shm_get_var($shm_id, $share_key);
echo $read_message2 . PHP_EOL;
//判斷共享記憶體中,某個值是否存在
$isexists = shm_has_var($shm_id, $share_key);
var_dump($isexists);
//刪除一個值
shm_remove_var($shm_id, $share_key);
//判斷共享記憶體中,某個值是否存在
$isexists = shm_has_var($shm_id, $share_key);
var_dump($isexists);
//刪除一個共享記憶體
shm_remove($shm_id);
//關閉共享記憶體的連線
shm_detach($shm_id);

相關文章