Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Menggunakan Redis untuk melaksanakan storan sharded dalam PHP

Menggunakan Redis untuk melaksanakan storan sharded dalam PHP

WBOY
WBOYasal
2023-05-16 08:57:20748semak imbas

Dengan pembangunan berterusan aplikasi Internet, permintaan untuk penyimpanan dan pemprosesan data terus meningkat. Walau bagaimanapun, pangkalan data hubungan tradisional mempunyai kesesakan tertentu dalam prestasi dan kebolehskalaan. Untuk menyelesaikan masalah ini, pangkalan data NoSQL wujud. Antaranya, Redis, sebagai pangkalan data NoSQL berkelajuan tinggi, digunakan secara meluas dalam bidang seperti caching, baris gilir mesej, dan storan nilai kunci. Artikel ini akan memperkenalkan secara terperinci cara menggunakan PHP untuk menyambung ke Redis dan melaksanakan storan berpecah untuk meningkatkan prestasi baca dan tulis serta kebolehskalaan.

1. Pengetahuan asas tentang Redis

  1. Struktur data Redis

Redis menyokong pelbagai struktur data, termasuk rentetan, jadual cincang dan senarai , set dan set yang dipesan, dsb. Dalam aplikasi, Redis biasanya digunakan sebagai cache untuk mengurangkan tekanan pelayan dengan menyimpan data yang biasa digunakan.

  1. Kaedah kegigihan Redis

Redis menyokong dua kaedah kegigihan: RDB dan AOF. RDB dilaksanakan dengan kerap menyimpan data dalam ingatan kepada syot kilat pada cakera, manakala AOF merekodkan semua operasi yang ditulis kepada Redis supaya ia boleh dilaksanakan semula apabila Redis dimulakan semula.

  1. Replikasi tuan-hamba Redis

Redis menyokong replikasi tuan-hamba, yang boleh meningkatkan prestasi dan ketersediaan bacaan dengan berkesan. Replikasi induk-hamba membolehkan pelayan induk menyegerakkan data kepada berbilang pelayan hamba, dengan itu mengurangkan tekanan pada pelayan induk dan meningkatkan ketersediaan sistem. Apabila pelayan induk gagal, ia secara automatik beralih ke pelayan hamba supaya sistem boleh pulih dengan cepat.

2. PHP bersambung ke Redis

Anda boleh menyambung ke Redis melalui sambungan PECL atau sambungan redis terbina dalam. Seterusnya, penggunaan kedua-duanya akan diperkenalkan secara terperinci.

  1. Pelanjutan PECL

Pelanjutan PECL menyediakan ciri yang lebih maju, seperti gugusan Redis dan mod sentinel, tetapi memerlukan kompilasi dan pemasangan manual.

1) Pasang sambungan PECL

Mula-mula anda perlu memuat turun sambungan Redis, kemudian masukkan direktori sambungan dan laksanakan arahan berikut:

phpize
./configure
make
make install

2) Sambung ke Redis

Connect Redis perlu menetapkan alamat IP dan port pelayan Redis. Selepas sambungan diwujudkan, operasi berkaitan boleh dilakukan.

$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
$redis->set('name', 'redis');
$name = $redis->get('name');
echo $name;
  1. sambungan redis

sambungan redis ialah sambungan rasmi untuk PHP 5.5 dan ke atas Ia sangat mudah untuk dipasang dan digunakan, serta tidak memerlukan kompilasi dan pemasangan manual .

1) Pasang sambungan redis

Boleh dipasang melalui yum:

yum install php-redis

Anda juga boleh memuat turun pakej pemasangan secara manual, kemudian nyahzip dan pasang:

wget https://github.com/phpredis/phpredis/archive/5.2.3.tar.gz
tar -zxvf 5.2.3.tar.gz
cd phpredis-5.2.3
phpize
./configure
make && make install

2) Sambungkan Redis

Menyambung ke Redis juga memerlukan penetapan alamat IP dan port pelayan Redis. Selepas sambungan diwujudkan, operasi berkaitan boleh dilakukan.

$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
$redis->set('name', 'redis');
$name = $redis->get('name');
echo $name;

3. Storan pecahan Redis

Apabila jumlah data Redis sangat besar, prestasi satu nod mungkin mencapai kesesakan. Untuk meningkatkan prestasi dan ketersediaan, storan sharded boleh dilaksanakan dengan menyebarkan data merentas berbilang nod.

Storan pecahan memperuntukkan data kepada nod yang berbeza dalam bentuk yang berbeza dan setiap nod menyimpan sebahagian daripada data. Dengan cara ini, pelanggan boleh mencari data yang sepadan pada setiap nod dengan mengira nilai cincang kunci.

  1. Pencincangan konsisten

Pencincangan konsisten ialah algoritma yang digunakan untuk menyelesaikan kesesakan prestasi teragih bagi cache atau pangkalan data. Dengan memetakan nilai cincang kekunci pada gelang, nod terdekat ditemui mengikut arah jam pada gelang sebagai nod storan data. Apabila menambah atau memadam nod, nod bersebelahan akan terjejas, tetapi nod lain tidak akan terjejas.

  1. Storan serpihan Redis

Storan serpihan Redis boleh dilaksanakan melalui algoritma pencincangan yang konsisten. Langkah-langkah khusus adalah seperti berikut:

1) Kira nilai cincang kunci dan cari nod yang sepadan.

$server = $nodes[crc32($key) % count($nodes)];

2) Sambungkan nod yang sepadan dan lakukan operasi yang berkaitan.

$redis = new Redis();
$redis->connect($server['host'], $server['port']);
$redis->set($key, $value);

3) Apabila nod ditambah atau dipadamkan, nilai cincangan kunci boleh dikira semula dan dipetakan melalui algoritma pencincangan yang konsisten untuk mengagihkan data secara sama rata ke nod baharu dan memadamkan data nod asal.

4. Proses pelaksanaan

Di bawah, kami akan memperkenalkan secara terperinci cara menggunakan PHP untuk menyambung ke Redis untuk melaksanakan storan berpecah.

  1. Persediaan alam sekitar

Persekitaran yang digunakan dalam eksperimen ini adalah seperti berikut:

  • Sistem pengendalian CentOS 7.6.1810
  • PHP 7.2.22
  • Redis 3.2.12
  1. Muat turun dan pasang sambungan Redis
wget https://github.com/phpredis/phpredis/archive/5.2.3.tar.gz
tar -zxvf 5.2.3.tar.gz
cd phpredis-5.2.3
phpize
./configure
make && make install
  1. Tulis storan yang dipecahkan kod

Kod untuk menyambung ke Redis dan melaksanakan storan sharded adalah seperti berikut:

<?php

// Redis节点列表
$nodes = array(
    array('host' => '127.0.0.1', 'port' => 6379),
    array('host' => '127.0.0.1', 'port' => 6380),
);

// 计算键的散列值,并找到对应的节点
function getServer($key, $nodes)
{
    $server = $nodes[crc32($key) % count($nodes)];
    return $server;
}

// 连接对应的节点,进行相关操作
function redis($key, $value, $nodes)
{
    $server = getServer($key, $nodes);
    $redis = new Redis();
    $redis->connect($server['host'], $server['port']);
    $redis->set($key, $value);
    return true;
}

// 测试代码
$key = 'name';
$value = 'redis';
redis($key, $value, $nodes);
$name = redis->get($key);
echo $name;

?>

5 Ringkasan

Artikel ini memperincikan cara menggunakan PHP untuk disambungkan Redis dan gunakan pencincangan yang konsisten Algoritma melaksanakan storan berpecah untuk meningkatkan prestasi baca dan tulis serta kebolehskalaan. Sebagai pangkalan data NoSQL berkelajuan tinggi, Redis digunakan secara meluas dan mempunyai prestasi dan ketersediaan yang sangat baik. Dalam aplikasi sebenar, adalah perlu untuk memilih penyelesaian storan sharded yang sesuai berdasarkan keadaan tertentu dan memberi perhatian kepada keserasian dan kebolehselenggaraan.

Atas ialah kandungan terperinci Menggunakan Redis untuk melaksanakan storan sharded dalam 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