Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk mengoptimumkan pertanyaan pangkalan data dengan cache pembangunan PHP

Bagaimana untuk mengoptimumkan pertanyaan pangkalan data dengan cache pembangunan PHP

WBOY
WBOYasal
2023-11-07 11:02:21933semak imbas

Bagaimana untuk mengoptimumkan pertanyaan pangkalan data dengan cache pembangunan PHP

Pertanyaan pangkalan data ialah salah satu kesesakan prestasi yang paling biasa dalam aplikasi web, dan kesesakan ini boleh dikurangkan dengan berkesan melalui mekanisme caching. Terdapat banyak cara untuk melaksanakan caching dalam pembangunan PHP Artikel ini akan memperkenalkan beberapa kaedah biasa dan contoh kod khusus.

  1. Gunakan cache fail

Caching fail ialah salah satu kaedah caching yang paling biasa. Prinsipnya sangat mudah, iaitu, data disimpan dalam fail Apabila data perlu dibaca, ia terlebih dahulu ditentukan sama ada fail itu wujud dan sama ada ia telah tamat tempoh fail itu. Jika ia tidak wujud atau telah tamat tempoh, minta pangkalan data dan kemas kini cache.

Berikut ialah contoh penggunaan caching fail:

function get_data($key, $expire) {
    $cache_file = 'cache/' . md5($key) . '.txt';
    if (file_exists($cache_file) && time() - filemtime($cache_file) < $expire) {
        $data = file_get_contents($cache_file);
    } else {
        $data = query_database($key);
        file_put_contents($cache_file, $data);
    }
    return $data;
}

Dalam contoh ini, fungsi get_data menerima dua parameter: $key mewakili kata kunci pertanyaan, $expire mewakili data Masa tamat tempoh. Fungsi pertama menjana nama fail cache yang unik melalui fungsi md5, dan kemudian menentukan sama ada fail cache wujud dan telah tamat tempoh Jika ya, data dibaca daripada fail cache, jika tidak, data dibaca daripada pangkalan data dan fail cache dikemas kini.

  1. Gunakan cache memcache

Memcache ialah mekanisme caching memori yang menyimpan data dalam memori, dengan itu meningkatkan kelajuan akses. Faedah menggunakan Memcache ialah ia sangat pantas dan boleh menyimpan sejumlah besar data. Walau bagaimanapun, kelemahan menggunakan Memcache ialah jika pelayan dimulakan semula atau Memcache gagal, data cache akan dikosongkan, yang perlu diberi perhatian.

Berikut ialah contoh penggunaan cache Memcache:

$memcache = new Memcache;
$memcache->connect('localhost', 11211) or die ("Could not connect");

function get_data($key, $expire) {
    global $memcache;
    $data = $memcache->get(md5($key));
    if (!$data) {
        $data = query_database($key);
        $memcache->set(md5($key), $data, false, $expire);
    }
    return $data;
}

Dalam contoh ini, kita mula-mula menyambung ke pelayan Memcache melalui kaedah sambung Memcache. Kemudian kami mentakrifkan fungsi get_data yang parameternya sama dengan contoh menggunakan caching fail. Di dalam fungsi, kami mula-mula cuba mendapatkan data daripada Memcache. Jika pengambilan gagal, data akan ditanya daripada pangkalan data dan ditambahkan pada Memcache.

  1. Menggunakan Redis Cache

Redis ialah sistem caching serupa dengan Memcache, tetapi dengan lebih banyak ciri. Redis boleh menyimpan data dalam memori dan menyimpan data ke cakera untuk mengelakkan kehilangan data apabila pelayan dimulakan semula. Redis juga menyokong lebih banyak jenis data cache, seperti senarai, set, jadual cincang, dsb.

Berikut ialah contoh menggunakan cache Redis:

$redis = new Redis();
$redis->connect('localhost', 6379);

function get_data($key, $expire) {
    global $redis;
    $data = $redis->get(md5($key));
    if (!$data) {
        $data = query_database($key);
        $redis->set(md5($key), $data, $expire);
    }
    return $data;
}

Contoh ini hampir sama dengan contoh menggunakan Memcache, kecuali kami menukar objek sambungan kepada sambungan Redis objek dan set Parameter kaedah adalah sedikit berbeza.

  1. Gunakan cache OPcache

OPcache ialah mekanisme caching yang lebih baharu yang telah ditambah dalam versi PHP 5.5.0. Ia boleh menyusun fail PHP ke dalam bytecode dan menyimpan bytecode ini dalam memori untuk mempercepatkan PHP. Memandangkan OPcache hanya digunakan untuk cache fail PHP, peranannya terhad untuk aplikasi web yang menggunakan pertanyaan pangkalan data.

Berikut ialah contoh penggunaan cache OPcache:

function get_data($key) {
    $filename = 'cache/' . md5($key) . '.php';
    if (file_exists($filename)) {
        include $filename;
    } else {
        $data = query_database($key);
        file_put_contents($filename, '<?php $data = ' . var_export($data, true) . '; ?>');
        include $filename;
    }
    return $data;
}

Dalam contoh ini, kami menggunakan kod PHP untuk menjana fail cache. Kami mula-mula menjana nama fail unik melalui fungsi md5, dan kemudian menentukan sama ada fail cache wujud. Jika ia wujud, fail cache diperkenalkan melalui fungsi include, jika tidak, kami menanyakan pangkalan data dan menyimpan hasilnya ke dalam fail cache. Format fail cache ialah kod PHP, jadi data boleh dimuatkan terus ke dalam pembolehubah $data menggunakan fungsi include.

Ringkasan

Di atas adalah beberapa kaedah caching biasa digunakan dalam pembangunan PHP. Menggunakan cache boleh meningkatkan prestasi aplikasi web dengan ketara dan mengurangkan pertanyaan pangkalan data yang tidak perlu. Sudah tentu, pilihan kaedah caching untuk digunakan perlu berdasarkan situasi tertentu. Jika data kerap berubah atau memerlukan storan berterusan, disyorkan untuk menggunakan cache Redis atau cache fail. Jika data jarang berubah, anda boleh menggunakan cache fail atau cache Memcache. Akhir sekali, perlu diingatkan bahawa apabila menggunakan cache, anda perlu mempertimbangkan masa tamat tempoh cache dan konsistensi data cache dan data pangkalan data.

Atas ialah kandungan terperinci Bagaimana untuk mengoptimumkan pertanyaan pangkalan data dengan cache pembangunan PHP. 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