MySQL Verilerini PHP Memcached Ile Önbelleğe Alımı
Mr.MirketÜye
2022-10-04 02:44:22 96 views
[ATTACH type="full"]68[/ATTACH]
Giriş
Memcached, web uygulamalarınızı hızlandırmak için kullanabileceğiniz dağıtılmış bir bellek önbelleğe alma sistemidir. Memcached, en hızlı SSD’den (Katı Hal Sürücüsü) bile birkaç kat daha hızlı olan sunucunuzun RAM’ini (Random Access Memory) kullandığı için yüksek hızlı bir veri depolama katmanı olarak çalışır.
İstemciler web uygulamanıza ilk kez bağlandıklarında, Memcached birincil depolama konumunuza bağlanır ve gelecekteki veri isteklerine daha hızlı hizmet vermek için verileri bir anahtar-değer belleğinde önbelleğe alır. Bu, disk G / Ç işlemlerini azaltır ve Memcached’i verileri önbelleğe almak için en iyi uygulamalardan biri yapar.
Bu kılavuzda, Ubuntu 20.04’te PHP ile MySQL verilerini önbelleğe almak ve almak için php-memcache kitaplığını kullanacaksınız. Daha sonra, verileri makinelerin ve insanların okuması ve yazması kolay olan JSON (JavaScript Object Notation) biçiminde çıktı alacaksınız.
Önkoşullar
Bu kılavuzu takip etmek için, aşağıdaki gereksinimleri karşıladığınızdan emin olun:
Bir Ubuntu 20.04 sunucusu.
Bir sudo kullanıcısı.
LAMP Yığını.
Memcached Sunucu.
Önce
sunucunuza ve
kitaplığı kurun . Bu, Memcached işlevlerini PHP kodunuz içinde kullanmanıza izin veren bir PHP modülüdür.
Kitaplığı yüklemek için Apache web sunucusunu yeniden başlatın .
Ardından, MySQL sunucunuza bir kök kullanıcı olarak bağlanın.
Ardından MySQL sunucunuzun kök şifresini girin ve ENTERdevam etmek için tuşuna basın .
İstemi aldığınızda , bir
veritabanı oluşturmak için aşağıdaki komutu çalıştırın .
MySQL sunucunuz için root olmayan bir kullanıcı oluşturun.
Güçlü bir değerle değişmeyi unutmayın . MySQL’e PHP ile bağlanmak için bu kimlik bilgilerini kullanacaksınız.
MariaDB sunucusunu MySQL’in yerine geçme olarak kullanıyorsanız,
kullanıcıyı oluşturmak için yukarıdaki komutu aşağıdaki sözdizimine değiştirin .
Veritabanına geçin .
Ardından bir
tablo oluşturun . Bu tablo, verileri MySQL veritabanınızda kalıcı olarak saklayacaktır. MySQL verileri, verileri sunucunuzun diskinde depoladığından, binlerce ürün eklediğinizde veya web uygulamanız viral hale geldiğinde ve birkaç kullanıcı aynı anda veritabanı sunucusuna girdiğinde zamanla yavaşlayabilir. Bu kılavuzun ilerleyen kısımlarında, bir PHP dosyasında Memcached sunucusunu kullanarak bu tablo için bir önbellek oluşturacaksınız.
Şimdilik sadece
masayı kur .
Tabloyu bazı kayıtlarla doldurun .
Verilerin yerinde olduğundan emin olmak için tabloya
karşı bir ifade çalıştırın
Tüm öğelerin aşağıda gösterildiği gibi görüntülendiğinden emin olun.
MySQL komut satırı arayüzünden çıkın.
Bir veritabanı tanımladınız, örnek bir tablo oluşturdunuz ve onu bazı verilerle doldurdunuz. Şimdi, verileri JSON biçiminde almak ve görüntülemek için sunucunuza bağlanan bir PHP betiği oluşturacaksınız.
Web sunucunuzun kök dizininde
yeni bir
dosya oluşturmak için kullanın .
Ardından, yeni bir
etiket açın ve
web istemcilerini bu dosyadan döndürülen verileri JSON biçiminde ele almaları konusunda bilgilendirmek için bir ekleyin .
Ardından, yeni bir
blok açın ve veritabanı değişkenlerini bildirin. Veritabanı değişkenlerini bu kılavuzda daha önce oluşturduğunuz veritabanı adı, kullanıcı ve parolayla eşleştirin.
Ardından, yeni bir Memcache sınıfı
başlatın ve Memcached sunucunuza bağlantı noktasından bağlanmak için yöntemi çağırın
Ardından bir
SQL ifadesi tanımlayın .
Tabloyu sorgulamak ve MySQL sunucunuzda depolanan öğeleri almak için bu komutu kullanacaksınız .
Ardından, SQL ifadenizin değerini bir
işlevde ileterek Memcached anahtarınız için yeni bir ad oluşturun . Bu, bir sorun durumunda giderilmesi daha kolay olan küçük bir anahtar oluşturur.
Ardından, Memcached sunucusunun yukarıda oluşturduğunuz ada sahip bir anahtar içerip içermediğini kontrol etmek için aşağıdaki kod parçacığını yazın. Anahtarın boş bir değer (
) içermemesi durumunda, önbelleğe alınan verileri Memcached sunucusundan döndürün. Ardından,
verilerinizi işaretlemek için ifadeyi kullanın, böylece komut dosyası önbellekten ne zaman döndüğünü bilirsiniz.
Aksi takdirde, PDO Kitaplığını kullanarak MySQL sunucusundan veri almak için aşağıdaki kodu kullanın. Verileri MySQL veritabanından ilk kez aldıktan sonra
, verileri
saniyeler boyunca önbelleğe almak için komutu kullanın . İş mantığınıza bağlı olarak bu değeri yaşama süresini artırabilirsiniz. Ardından,
MySQL sunucusundan döndürüldüğünde verileri işaretlemek için ifadeyi kullanın.
Son olarak, JSON kodlu verileri MySQL veya Memcached Cache’den yankılayın. Herhangi bir PDO hatası durumunda, onu yakalayın ve görüntüleyin.
Dosyanıza her şeyi girdiğinizde , aşağıdaki içeriğe benzer olmalıdır.
CTRL+ X, Ardından Yve tuşlarına basarak işiniz bittiğinde dosyayı kaydedin ve kapatın ENTER. Dosyanın beklendiği gibi çalışıp çalışmadığını görmek için bir sonraki adıma geçin.
Döndürülen çıktıyı kontrol etmek için dosyayı iki kez çağırın . Bunu yapmak için
aşağıdaki komutu çalıştırın .
Verileri ilk kez talep ettiğinizde,
aşağıda gösterildiği gibi MySQL sunucusundan ( ) gelmelidir .
Memcached anahtarının süresi dolmadan önce aynısını tekrar çalıştırın.
Bu sefer, verileriniz Memcache’den (
) gelmelidir .
Yukarıdaki çıktılardan da görebileceğiniz gibi, PHP dosyanız beklendiği gibi çalışıyor ve verileri Memcached sunucusuyla önbelleğe alabiliyorsunuz.
Bu eğiticide,
MySQL verilerini Ubuntu 20.04 sunucusunda JSON biçiminde önbelleğe almak ve görüntülemek için PHP kitaplığını kullandınız . Web uygulamalarınızı veya MySQL’i arka uç sunucusu olarak kullanan dinamik web sitelerinizi hızlandırmak için bu kılavuzdaki önbelleğe alma mantığını kullanabilirsiniz.
Giriş
Memcached, web uygulamalarınızı hızlandırmak için kullanabileceğiniz dağıtılmış bir bellek önbelleğe alma sistemidir. Memcached, en hızlı SSD’den (Katı Hal Sürücüsü) bile birkaç kat daha hızlı olan sunucunuzun RAM’ini (Random Access Memory) kullandığı için yüksek hızlı bir veri depolama katmanı olarak çalışır.
İstemciler web uygulamanıza ilk kez bağlandıklarında, Memcached birincil depolama konumunuza bağlanır ve gelecekteki veri isteklerine daha hızlı hizmet vermek için verileri bir anahtar-değer belleğinde önbelleğe alır. Bu, disk G / Ç işlemlerini azaltır ve Memcached’i verileri önbelleğe almak için en iyi uygulamalardan biri yapar.
Bu kılavuzda, Ubuntu 20.04’te PHP ile MySQL verilerini önbelleğe almak ve almak için php-memcache kitaplığını kullanacaksınız. Daha sonra, verileri makinelerin ve insanların okuması ve yazması kolay olan JSON (JavaScript Object Notation) biçiminde çıktı alacaksınız.
Önkoşullar
Bu kılavuzu takip etmek için, aşağıdaki gereksinimleri karşıladığınızdan emin olun:
Bir Ubuntu 20.04 sunucusu.
Bir sudo kullanıcısı.
LAMP Yığını.
Memcached Sunucu.
php-memcacheKitaplığı Kurun
Önce
SSHsunucunuza ve
php-memcachekitaplığı kurun . Bu, Memcached işlevlerini PHP kodunuz içinde kullanmanıza izin veren bir PHP modülüdür.
$ sudo apt update
$ sudo apt install -y php-memcachephp-memcache
Kitaplığı yüklemek için Apache web sunucusunu yeniden başlatın .
$ sudo systemctl restart apache2test_dbVeritabanı Kurun
Ardından, MySQL sunucunuza bir kök kullanıcı olarak bağlanın.
$ sudo mysql -u root -p
Ardından MySQL sunucunuzun kök şifresini girin ve ENTERdevam etmek için tuşuna basın .
mysql>İstemi aldığınızda , bir
test_dbveritabanı oluşturmak için aşağıdaki komutu çalıştırın .
mysql> CREATE DATABASE test_db;test_db_userMySQL sunucunuz için root olmayan bir kullanıcı oluşturun.
EXAMPLE_PASSWORDGüçlü bir değerle değişmeyi unutmayın . MySQL’e PHP ile bağlanmak için bu kimlik bilgilerini kullanacaksınız.
mysql> CREATE USER 'test_db_user'@'localhost' IDENTIFIED WITH mysql_native_password BY 'EXAMPLE_PASSWORD';
mysql> GRANT ALL PRIVILEGES ON test_db.* TO 'test_db_user'@'localhost';
mysql> FLUSH PRIVILEGES;MariaDB sunucusunu MySQL’in yerine geçme olarak kullanıyorsanız,
test_db_userkullanıcıyı oluşturmak için yukarıdaki komutu aşağıdaki sözdizimine değiştirin .
MariaDB> GRANT ALL PRIVILEGES on test_db.* TO 'test_db_user'@'localhost' identified by 'EXAMPLE_PASSWORD';test_dbVeritabanına geçin .
mysql> USE test_db;Ardından bir
productstablo oluşturun . Bu tablo, verileri MySQL veritabanınızda kalıcı olarak saklayacaktır. MySQL verileri, verileri sunucunuzun diskinde depoladığından, binlerce ürün eklediğinizde veya web uygulamanız viral hale geldiğinde ve birkaç kullanıcı aynı anda veritabanı sunucusuna girdiğinde zamanla yavaşlayabilir. Bu kılavuzun ilerleyen kısımlarında, bir PHP dosyasında Memcached sunucusunu kullanarak bu tablo için bir önbellek oluşturacaksınız.
Şimdilik sadece
productsmasayı kur .
mysql> CREATE TABLE products
(
product_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
product_name VARCHAR(50),
retail_price DOUBLE
) ENGINE = InnoDB;productsTabloyu bazı kayıtlarla doldurun .
mysql> INSERT INTO products(product_name, retail_price) VALUES ('LEATHER JACKET', '99.95'😉;
mysql> INSERT INTO products(product_name, retail_price) VALUES ('LED MOUSE', '22.65'😉;
mysql> INSERT INTO products(product_name, retail_price) VALUES ('MOUSE PAD', '4.95'😉;
mysql> INSERT INTO products(product_name, retail_price) VALUES ('PURE COTTON BUDS', '2.85'😉;Verilerin yerinde olduğundan emin olmak için tabloya
SELECTkarşı bir ifade çalıştırın
productsmysql> SELECT
product_id,
product_name,
retail_price
FROM products;Tüm öğelerin aşağıda gösterildiği gibi görüntülendiğinden emin olun.
+------------+------------------+--------------+
| product_id | product_name | retail_price |
+------------+------------------+--------------+
| 1 | LEATHER JACKET | 99.95 |
| 2 | LED MOUSE | 22.65 |
| 3 | MOUSE PAD | 4.95 |
| 4 | PURE COTTON BUDS | 2.85 |
+------------+------------------+--------------+
4 rows in set (0.00 sec)MySQL komut satırı arayüzünden çıkın.
mysql> QUIT;Bir veritabanı tanımladınız, örnek bir tablo oluşturdunuz ve onu bazı verilerle doldurdunuz. Şimdi, verileri JSON biçiminde almak ve görüntülemek için sunucunuza bağlanan bir PHP betiği oluşturacaksınız.
Bir PHP Dosyası Oluşturun
Web sunucunuzun kök dizininde
nanoyeni bir
/var/www/html/products.phpdosya oluşturmak için kullanın .
$ sudo nano /var/www/html/products.phpArdından, yeni bir
<?phpetiket açın ve
Content-Type:application/jsonweb istemcilerini bu dosyadan döndürülen verileri JSON biçiminde ele almaları konusunda bilgilendirmek için bir ekleyin .
<?php
header("Content-Type:application/json"😉;Ardından, yeni bir
try {..blok açın ve veritabanı değişkenlerini bildirin. Veritabanı değişkenlerini bu kılavuzda daha önce oluşturduğunuz veritabanı adı, kullanıcı ve parolayla eşleştirin.
try {
$db_name = 'test_db';
$db_user = 'test_db_user';
$db_password = 'EXAMPLE_PASSWORD';
$db_host = 'localhost';Ardından, yeni bir Memcache sınıfı
addServerbaşlatın ve Memcached sunucunuza bağlantı noktasından bağlanmak için yöntemi çağırın
11211 $memcache = new Memcache();
$memcache->addServer("127.0.0.1", 11211);Ardından bir
SELECTSQL ifadesi tanımlayın .
productsTabloyu sorgulamak ve MySQL sunucunuzda depolanan öğeleri almak için bu komutu kullanacaksınız .
$sql = 'SELECT
product_id,
product_name,
retail_price
FROM products
';Ardından, SQL ifadenizin değerini bir
md5işlevde ileterek Memcached anahtarınız için yeni bir ad oluşturun . Bu, bir sorun durumunda giderilmesi daha kolay olan küçük bir anahtar oluşturur.
$key = md5($sql);Ardından, Memcached sunucusunun yukarıda oluşturduğunuz ada sahip bir anahtar içerip içermediğini kontrol etmek için aşağıdaki kod parçacığını yazın. Anahtarın boş bir değer (
!= null) içermemesi durumunda, önbelleğe alınan verileri Memcached sunucusundan döndürün. Ardından,
$response['Memcache Data']verilerinizi işaretlemek için ifadeyi kullanın, böylece komut dosyası önbellekten ne zaman döndüğünü bilirsiniz.
$cached_data = $memcache->get($key);
$response = [];
if ($cached_data != null) {
$response['Memcache Data'] = $cached_data;Aksi takdirde, PDO Kitaplığını kullanarak MySQL sunucusundan veri almak için aşağıdaki kodu kullanın. Verileri MySQL veritabanından ilk kez aldıktan sonra
$memcache->set($key, $response, false, 5);, verileri
5saniyeler boyunca önbelleğe almak için komutu kullanın . İş mantığınıza bağlı olarak bu değeri yaşama süresini artırabilirsiniz. Ardından,
$response['MySQL Data']MySQL sunucusundan döndürüldüğünde verileri işaretlemek için ifadeyi kullanın.
} else {
$pdo = new PDO("mysql:host=" . $db_host . ";dbname=" . $db_name, $db_user, $db_password);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$stmt = $pdo->prepare($sql);
$stmt->execute();
$products = [];
while (($row = $stmt->fetch(PDO::FETCH_ASSOC)) !== false) {
$products[] = $row;
}
$memcache->set($key, $products, false, 5);
$response['MySQL Data'] = $products;
}Son olarak, JSON kodlu verileri MySQL veya Memcached Cache’den yankılayın. Herhangi bir PDO hatası durumunda, onu yakalayın ve görüntüleyin.
echo json_encode($response, JSON_PRETTY_PRINT) . "\n";
} catch(PDOException $e) {
$error = [];
$error['message'] = $e->getMessage();
echo json_encode($error, JSON_PRETTY_PRINT) . "\n";
}/var/www/html/products.phpDosyanıza her şeyi girdiğinizde , aşağıdaki içeriğe benzer olmalıdır.
<?php
header("Content-Type:application/json"😉;
try {
$db_name = 'test_db';
$db_user = 'test_db_user';
$db_password = 'EXAMPLE_PASSWORD';
$db_host = 'localhost';
$memcache = new Memcache();
$memcache->addServer("127.0.0.1", 11211);
$sql = 'SELECT
product_id,
product_name,
retail_price
FROM products
';
$key = md5($sql);
$cached_data = $memcache->get($key);
$response = [];
if ($cached_data != null) {
$response['Memcache Data'] = $cached_data;
} else {
$pdo = new PDO("mysql:host=" . $db_host . ";dbname=" . $db_name, $db_user, $db_password);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$stmt = $pdo->prepare($sql);
$stmt->execute();
$products = [];
while (($row = $stmt->fetch(PDO::FETCH_ASSOC)) !== false) {
$products[] = $row;
}
$memcache->set($key, $products, false, 5);
$response['MySQL Data'] = $products;
}
echo json_encode($response, JSON_PRETTY_PRINT) . "\n";
} catch(PDOException $e) {
$error = [];
$error['message'] = $e->getMessage();
echo json_encode($error, JSON_PRETTY_PRINT) . "\n";
}CTRL+ X, Ardından Yve tuşlarına basarak işiniz bittiğinde dosyayı kaydedin ve kapatın ENTER. Dosyanın beklendiği gibi çalışıp çalışmadığını görmek için bir sonraki adıma geçin.
Memcached Verilerini Test Edin
products.phpDöndürülen çıktıyı kontrol etmek için dosyayı iki kez çağırın . Bunu yapmak için
curlaşağıdaki komutu çalıştırın .
$ curl http://localhost/products.phpVerileri ilk kez talep ettiğinizde,
"MySQL Data" [...]aşağıda gösterildiği gibi MySQL sunucusundan ( ) gelmelidir .
{
"MySQL Data": [
{
"product_id": 1,
"product_name": "LEATHER JACKET",
"retail_price": 99.95
},
{
"product_id": 2,
"product_name": "LED MOUSE",
"retail_price": 22.65
},
{
"product_id": 3,
"product_name": "MOUSE PAD",
"retail_price": 4.95
},
{
"product_id": 4,
"product_name": "PURE COTTON BUDS",
"retail_price": 2.85
}
]
}Memcached anahtarının süresi dolmadan önce aynısını tekrar çalıştırın.
$ curl http://localhost/products.phpBu sefer, verileriniz Memcache’den (
"Memcache Data": [...]) gelmelidir .
{
"Memcache Data": [
{
"product_id": 1,
"product_name": "LEATHER JACKET",
"retail_price": 99.95
},
{
"product_id": 2,
"product_name": "LED MOUSE",
"retail_price": 22.65
},
{
"product_id": 3,
"product_name": "MOUSE PAD",
"retail_price": 4.95
},
{
"product_id": 4,
"product_name": "PURE COTTON BUDS",
"retail_price": 2.85
}
]
}Yukarıdaki çıktılardan da görebileceğiniz gibi, PHP dosyanız beklendiği gibi çalışıyor ve verileri Memcached sunucusuyla önbelleğe alabiliyorsunuz.
Sonuç
Bu eğiticide,
php-memcacheMySQL verilerini Ubuntu 20.04 sunucusunda JSON biçiminde önbelleğe almak ve görüntülemek için PHP kitaplığını kullandınız . Web uygulamalarınızı veya MySQL’i arka uç sunucusu olarak kullanan dinamik web sitelerinizi hızlandırmak için bu kılavuzdaki önbelleğe alma mantığını kullanabilirsiniz.
