Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Pembangunan PHP: Cara menggunakan Redis untuk mengurus Sesi

Pembangunan PHP: Cara menggunakan Redis untuk mengurus Sesi

王林
王林asal
2023-06-14 19:31:581333semak imbas

Apabila trafik tapak web meningkat, pelayan bahagian belakang perlu mengurus beribu-ribu sesi pengguna. Tugas ini sangat intensif sumber pelayan kerana pendekatan tradisional adalah untuk menyimpan data sesi dalam sistem fail pada pelayan. Walau bagaimanapun, dengan kemajuan teknologi dan kemunculan Redis, kami kini boleh memanfaatkan Redis untuk mengurus sesi, dengan itu meningkatkan prestasi dan kebolehpercayaan pelayan.

Redis ialah pangkalan data dalam memori yang cekap yang menyokong penyimpanan dan mendapatkan semula pelbagai struktur data. Redis sendiri ditulis dalam C, tetapi ia menyokong perpustakaan pelanggan dalam pelbagai bahasa, menjadikannya mudah untuk aplikasi PHP menggunakan Redis. Dalam artikel ini, kami akan memperkenalkan cara menggunakan Redis untuk mengurus sesi untuk aplikasi PHP.

Pengurusan Sesi Tradisional

Dalam pengurusan sesi tradisional, apabila pengguna log masuk, aplikasi PHP mencipta ID sesi unik dan menyimpannya dalam kuki penyemak imbas. PHP kemudian menyimpan data sesi dalam sistem fail pelayan dan mendapatkannya semula pada kali berikutnya pengguna melawat tapak web. Pendekatan ini mempunyai beberapa kelemahan:

  1. Operasi I/O Cakera menggunakan sumber. Setiap kali data sesi ditulis atau diambil daripada cakera, operasi I/O berlaku, menggunakan lebih banyak sumber CPU dan memori.
  2. Data sesi disimpan pada satu pelayan. Jika aplikasi berjalan pada berbilang pelayan, perkongsian data sesi antara pelayan menjadi sukar.
  3. Sistem fail mungkin gagal. Apabila volum akses tinggi, kunci fail dan operasi I/O fail mungkin menjadi kesesakan prestasi.
  4. Sandaran dan pemulihan data sesi menjadi lebih sukar. Jika anda perlu membuat sandaran atau membina semula pelayan, semua data sesi mesti disandarkan dan dipulihkan.

Oleh itu, kami memerlukan cara yang lebih baik untuk mengurus sesi, yang seharusnya mengoptimumkan aspek seperti prestasi, kebolehpercayaan dan kebolehskalaan.

Sebab populariti Redis

Redis ialah pangkalan data NoSQL yang popular kerana ia mempunyai kelebihan berikut:

  1. Redis disimpan dalam ingatan. Berbanding dengan sistem fail tradisional, akses memori adalah lebih pantas.
  2. Redis menyokong pelbagai struktur data (rentetan, jadual cincang, senarai, set dan set tersusun). Ini menjadikan Redis lebih fleksibel dan boleh menggunakan pelbagai jenis data untuk menyimpan dan mengurus data sesi.
  3. Redis menyokong storan berterusan. Redis boleh mengekalkan data ke cakera walaupun pelayan ranap atau berhenti.

Oleh itu, apabila menggunakan Redis untuk mengurus sesi aplikasi, tidak perlu lagi menyimpan data sesi dalam sistem fail. Sebaliknya, kami boleh menyimpan data sesi dalam memori Redis, meningkatkan prestasi dan kebolehpercayaan.

Gunakan Redis untuk mengurus sesi dalam aplikasi PHP

Di bawah ini kami akan menerangkan cara menggunakan Redis untuk mengurus data sesi dalam aplikasi PHP.

Pemasangan dan konfigurasi sambungan Redis

Pertama, anda perlu menentukan sama ada PHP telah memasang sambungan Redis Jika ia tidak dipasang, anda perlu memuat turun dan memasangnya.

Pada Debian/Ubuntu, anda boleh menggunakan arahan berikut untuk memasang sambungan Redis:

sudo apt-get install php-redis

Pada CentOS/RHEL, anda boleh menggunakan arahan berikut untuk memasang sambungan Redis:

sudo yum install php-redis

Selepas memasang sambungan Redis, anda perlu mendayakannya dalam fail konfigurasi PHP. Tambahkan baris berikut pada fail php.ini:

extension=redis.so

Melaksanakan pengurusan sesi Redis

Seterusnya, kita perlu menukar cara aplikasi PHP kami menyimpan sesi supaya ia menggunakan Redis sebagai stor data.

Dalam aplikasi PHP, terdapat pengendali sesi untuk mengurus data sesi, jadi kami perlu mencipta pengendali sesi tersuai untuk menyimpan dan mendapatkan semula data sesi menggunakan Redis. Berikut ialah pengendali sesi tersuai yang mudah:

<?php
class RedisSessionHandler implements SessionHandlerInterface
{
    private $client;
    private $ttl;

    public function __construct($client, $ttl = 1440)
    {
        $this->client = $client;
        $this->ttl = $ttl;
    }

    public function open($savePath, $sessionName)
    {
        return true;
    }

    public function close()
    {
        unset($this->client);
        return true;
    }

    public function read($sessionId)
    {
        $result = $this->client->get($sessionId);

        return ($result === false) ? '' : $result;
    }

    public function write($sessionId, $sessionData)
    {
        return $this->client->setex($sessionId, $this->ttl, $sessionData);
    }

    public function destroy($sessionId)
    {
        return $this->client->del($sessionId);
    }

    public function gc($maxlifetime)
    {
        return true;
    }
}
?>

Kod ini melaksanakan antara muka SessionHandlerInterface PHP. Antara muka ini mengandungi kaedah yang diperlukan untuk menyimpan dan mendapatkan semula data sesi menggunakan Redis. Dalam kod di atas, kami menggunakan arahan setex Redis untuk menetapkan masa tamat sesi. Tempoh sah sesi boleh diubah dengan menukar pembolehubah $ttl (masa tamat tempoh).

Konfigurasikan PHP untuk memanggil pengendali sesi tersuai

Akhir sekali, anda perlu memberitahu PHP untuk memanggil pengendali sesi tersuai untuk menyimpan dan mendapatkan semula data sesi dalam Redis. Ini boleh dicapai dalam aplikasi PHP menggunakan kod seperti ini:

<?php
require_once('RedisSessionHandler.php');
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
$redisHandler = new RedisSessionHandler($redis, 86400);

session_set_save_handler($redisHandler);
session_start();
?>

Dalam kod di atas, kami mencipta sambungan Redis dan menyerahkannya kepada pengendali sesi tersuai. Kami kemudian mengkonfigurasi fungsi pengendali tersuai sebagai pengendali sesi lalai PHP menggunakan fungsi session_set_save_handler() PHP. Akhir sekali, kami memanggil session_start() untuk memulakan pengendali sesi.

Kesimpulan

Dalam artikel ini, kami membincangkan cara menggunakan Redis untuk mengurus sesi untuk aplikasi PHP. Menyimpan data sesi dalam memori Redis menghasilkan prestasi, kebolehpercayaan dan kebolehskalaan yang lebih baik. Dengan mencipta pengendali sesi tersuai, kami boleh menyimpan data sesi daripada aplikasi PHP dalam Redis untuk perkongsian antara berbilang pelayan atau mesin maya. Akhir sekali, kami menunjukkan cara untuk mengkonfigurasi pengendali sesi Redis tersuai menggunakan fungsi session_set_save_handler() terbina dalam PHP.

Atas ialah kandungan terperinci Pembangunan PHP: Cara menggunakan Redis untuk mengurus Sesi. 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