Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Mari bercakap tentang beberapa kaedah penulisan cache PHP biasa

Mari bercakap tentang beberapa kaedah penulisan cache PHP biasa

PHPz
PHPzasal
2023-04-25 17:36:15684semak imbas

Dalam pembangunan laman web, caching adalah cara yang berkesan untuk meningkatkan prestasi laman web. Sebagai salah satu bahasa pengaturcaraan yang digunakan secara meluas, PHP juga menyediakan pelbagai kaedah pelaksanaan caching. Artikel ini akan memperkenalkan beberapa kaedah penulisan cache PHP biasa untuk membantu pembangun mengoptimumkan prestasi tapak web.

1. Cache fail

Caching fail ialah kaedah caching mudah yang melaksanakan caching data dengan mensiri data dan menulisnya ke fail. Kod tersebut dilaksanakan seperti berikut:

function getCache($key, $lifetime) {
    $cacheFileName = md5($key) . '.cache';    // 产生缓存文件名
    if(file_exists($cacheFileName) && (time() - filemtime($cacheFileName)) < $lifetime) {
        // 缓存未过期,直接读取缓存文件
        return unserialize(file_get_contents($cacheFileName));
    } else {
        // 缓存已过期或不存在,重新获取数据并缓存
        $data = getData();
        file_put_contents($cacheFileName, serialize($data));
        return $data;
    }
}

Dalam kod di atas, kami menggunakan peraturan penjanaan nama fail untuk mengelakkan konflik nama fail cache, dan pada masa yang sama menentukan sama ada cache telah tamat tempoh setiap kali kami memperoleh cache. data, dengan itu memastikan kesahihan data yang dicache. Walau bagaimanapun, kaedah ini juga mempunyai beberapa kelemahan, seperti kos operasi IO sistem fail yang tinggi, yang mempunyai kesan tertentu terhadap prestasi pelayan.

2. Cache memori

Cache memori lebih cekap daripada cache fail dalam memori dan tidak memerlukan operasi IO sistem fail, dengan itu meningkatkan kelajuan pemerolehan data. Terdapat dua penyelesaian caching memori biasa:

  1. Memcache

Memcache ialah penyelesaian caching teragih berasaskan memori yang boleh digunakan dalam berbilang pelayan Laksanakan operasi baca dan tulis cache data. Sambungan PHP Memcache menyediakan antara muka yang ringkas dan mudah digunakan, membolehkan pembangun melaksanakan operasi membaca dan menulis data dengan mudah. Kod tersebut dilaksanakan seperti berikut:

$memcache = new Memcache;
$memcache->connect('localhost', 11211);
// 缓存读取操作
$data = $memcache->get($key);
if($data === false) {
    // 缓存不存在,重新获取数据并缓存
    $data = getData();
    $memcache->set($key, $data);
}

Dalam kod di atas, kami membuat instantiate objek Memcache, dan kemudian mewujudkan sambungan dengan perkhidmatan Memcache tempatan dengan port 11211. Apabila melakukan operasi cache, anda hanya perlu membaca dan menulis ke cache melalui kaedah dapatkan dan tetapkan.

  1. Redis

Redis ialah pangkalan data bukan perhubungan berprestasi tinggi berasaskan memori Ia menyokong pelbagai struktur data dan strategi caching lanjutan, dan boleh menyokong konkurensi tinggi dan Perkhidmatan rangkaian yang pantas dan responsif. Sambungan PHP untuk Redis menyediakan sokongan API, membolehkan pembangun menggunakan Redis dengan mudah sebagai penyelesaian caching.

$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
// 缓存读取操作
$data = $redis->get($key);
if($data === false) {
    // 缓存不存在,重新获取数据并缓存
    $data = getData();
    $redis->set($key, $data);
}

Dalam kod di atas, kami mula-mula menyambung ke pelayan Redis, dan kemudian melaksanakan operasi baca dan tulis cache melalui kaedah dapatkan dan tetapkan.

3. OPcache

OPcache ialah sambungan cache bytecode yang disertakan dengan PHP versi 5.5.0 Ia boleh cache kod dalam fail PHP ke dalam memori, dengan itu meningkatkan kelajuan pelaksanaan penterjemah. Oleh kerana cache ialah kod bait, ia boleh mengurangkan dengan ketara masa yang diperlukan oleh jurubahasa untuk mentafsir skrip PHP. Kaedah untuk mendayakan OPcache adalah sangat mudah:

  1. Ubah suai fail php.ini

Cari [OPcache] dalam fail php.ini dan dayakan sambungan ini:

; 打开OPcache扩展
zend_extension=opcache.so
[opcache]
; 缓存内存大小
opcache.memory_consumption=128
; 缓存路径
opcache.file_cache=/tmp
; 开启缓存
opcache.enable=1
  1. OPcache digunakan dalam kod
$cacheFilePath = 'cache.txt';
// 判断缓存是否存在且未过期
if(!empty(opcache_get_status()) && @file_exists($cacheFilePath) && (time() - filemtime($cacheFilePath)) < 60) {
  $cache = include $cacheFilePath;
} else {
  // 缓存不存在或已过期,重新获取数据并写入缓存文件
  $data = getData();
  // 将数据进行缓存
  file_put_contents($cacheFilePath, "<?php return " . var_export($data, true) . ';');
  $cache = $data;
}

Dalam kod di atas, kami mula-mula menentukan sama ada OPcache didayakan, dan kemudian memutuskan berdasarkan sama ada fail cache wujud dan sama ada masa cache telah tamat sama ada untuk membaca data daripada cache atau mengambil semula data. Jika cache tidak wujud atau telah tamat tempoh, kami menyerikan data yang diperoleh dan menulisnya ke dalam fail cache, dan kemudian membaca data dalam fail cache melalui sertakan.

4. Ringkasan

Di atas adalah beberapa kaedah penulisan cache PHP Setiap kaedah mempunyai kelebihan dan kelemahan tersendiri. Walaupun caching fail mudah dilaksanakan, ia tidak cekap Walaupun caching memori adalah cekap, operasinya agak rumit. OPcache ialah sambungan caching bytecode sendiri Ia tidak perlu dihidupkan secara manual Anda hanya perlu menggunakan fungsi tertentu dalam kod.

Atas ialah kandungan terperinci Mari bercakap tentang beberapa kaedah penulisan cache PHP biasa. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn