全部产品
Search
文档中心

ApsaraDB for Memcache:Menyimpan Variabel Sesi PHP di Cache

更新时间:Jun 30, 2025

Latar Belakang

Anda dapat menyimpan data dalam variabel global $_SESSION untuk mempermudah akses saat mengembangkan situs web PHP. File konfigurasi PHP mencakup pengaturan [Session] yang digunakan untuk menyimpan data ke file atau server Memcached. Item konfigurasi session.save_handler = memcached menentukan hal ini. Dalam banyak kasus, data sesi tidak memerlukan persistensi dan disimpan dalam cache Memcached untuk meningkatkan performa situs web.

Deskripsi Masalah

ApsaraDB for Memcache dan Memcached buatan sendiri sama-sama mematuhi protokol Memcached standar. Beberapa pengguna ingin memindahkan informasi sesi dari Memcached buatan sendiri ke ApsaraDB for Memcache guna mengurangi penggunaan memori server dan investasi dalam pemeliharaan Memcached, tanpa mengubah kode. Dokumen ini memberikan panduan untuk menangani masalah yang mungkin timbul selama proses migrasi.

Perbedaan utama antara ApsaraDB for Memcache dan Memcached buatan sendiri adalah otentikasi akun dan kata sandi.

  • ApsaraDB for Memcache: ApsaraDB for Memcache merupakan kluster terdistribusi yang menyediakan layanan eksternal secara seragam. Kluster ini mendukung keseimbangan beban tanpa Single Point of Failure (SPOF), serta memungkinkan penyesuaian konfigurasi secara fleksibel tanpa perlu memulai ulang layanan. Untuk layanan eksternal, mekanisme keamanan seperti daftar putih, pembatasan laju, serta otentikasi akun dan kata sandi telah diterapkan.

  • Memcached Buatan Sendiri: Sebagian besar instance Memcached buatan sendiri tidak memerlukan akun atau kata sandi, sehingga otentikasi SASL tidak tersedia dibandingkan dengan ApsaraDB for Memcache. Untuk memindahkan informasi sesi dari Memcached buatan sendiri ke ApsaraDB for Memcache, akun dan kata sandi harus dikonfigurasi di php.ini.

Solusi

  1. Fitur ini tidak didukung di versi lama ekstensi PHP Memcached. Anda harus memperbarui ekstensi PHP Memcached ke Versi 2.2.0. Contoh kode adalah sebagai berikut:

     wget http://pecl.php.net/get/memcached-2.2.0.tgz
     tar  zxvf  memcached-2.2.0.tgz
    
     cd memcached-2.2.0
    
     phpize
    
     ./configure --with-libmemcached-dir=/usr/local/libmemcached --enable-memcached-sasl
    
     make
    
     make install
  2. Temukan memcached.so yang sudah diperbarui, jalankan perintah stat untuk memastikan apakah pembaruan berhasil (perhatikan waktu modifikasi terakhir).

  3. Ubah konfigurasi php.ini.

    1. Bidang Sesi: Temukan bagian [Session] dan ubah mesin penyimpanannya menjadi:

      session.save_handler = memcached **(Perhatian: ada huruf d)**

      Ubah alamat penyimpanan, yaitu alamat akses Memcache, menjadi:

      session.save_path = "be6b6b8221cc11e4.m.cnhzalicm10pub001.ocs.aliyuncs.com:11211" (Perhatian: untuk ekstensi dengan huruf d, tidak diperlukan awalan tcp://. Untuk ekstensi tanpa huruf d, awalan tcp:// diperlukan)

      Ubah waktu maksimum caching di Memcached:

      session.gc_maxlifetime = 1440 (Satuan: detik. Sangat disarankan untuk menggunakan waktu hidup yang wajar agar hanya data yang sering digunakan yang disimpan di cache di ApsaraDB for Memcache)
    2. Bidang Memcached: Di bagian global php.ini, buat bagian [memcached] terpisah, dan tambahkan konfigurasi berikut di ruang kosong:

      [memcached]
      memcached.use_sasl = On
      memcached.sess_binary = On
      memcached.sess_sasl_username = "your_ocs_name"
      memcached.sess_sasl_password = "your_ocs_password"
      memcached.sess_locking = Off

Langkah-langkah instalasi selesai. Untuk parameter lainnya yang berguna di bagian Memcached dan Session sebelumnya, lihat tautan berikut.

http://php.net/manual/en/memcached.configuration.php

http://php.net/manual/en/session.configuration.php

Pengujian

Tulis kode pengujian berikut seperti pada session.php:

<?php
session_start();
$sn = session_id();
echo "session id:".$sn."\n";
$_SESSION["ocs_key"]="session_value";
echo "session:".$_SESSION["ocs_key"]."\n";
?>

Outputnya adalah sebagai berikut:

session id:ttrct9coa2q62r2sodlq4qf376

session:session_value

Dapatkan data yang ditulis oleh session.php dari Memcache melalui kode pengujian di get.php.

<?php
$memc = new Memcached();
$memc->setOption(Memcached::OPT_COMPRESSION, false);
$memc->setOption(Memcached::OPT_BINARY_PROTOCOL, true);
$memc->addServer("be6b6b8221cc11e4.m.cnhzalicm10pub001.ocs.aliyuncs.com", 11211);
$memc->setSaslAuthData("your_ocs_name", "your_ocs_password");
echo $memc->get("memc.sess.key.ttrct9coa2q62r2sodlq4qf376");
/*Perhatian: Di sini kunci memiliki awalan yang ditentukan oleh bidang memcached.sess_prefix di php.ini. Nilai defaultnya adalah "memc.sess.key." Awalan ini diikuti oleh sessionid "ttrct9coa2q62r2sodlq4qf376" seperti yang ditunjukkan di atas. */
?>

Output:

ocs_key|s:13:"session_value";

Ini menunjukkan bahwa PHP SESSION telah berhasil ditulis ke dalam Memcache.