


Menggunakan Redis untuk melaksanakan kunci teragih dalam PHP
Dengan perkembangan pesat Internet dan peningkatan mendadak dalam lawatan tapak web, kepentingan sistem yang diedarkan secara beransur-ansur menjadi ketara. Dalam sistem yang diedarkan, isu penyegerakan konkurensi dan konsistensi data tidak dapat dielakkan terlibat. Kunci teragih, sebagai satu cara untuk menyelesaikan masalah penyegerakan serentak, secara beransur-ansur telah digunakan secara meluas dalam sistem teragih. Dalam PHP, Redis boleh digunakan untuk melaksanakan kunci teragih, yang akan diperkenalkan oleh artikel ini.
Apakah kunci teragih?
Dalam sistem yang diedarkan, apabila berbilang mesin memproses tugas yang sama bersama-sama, untuk mengelakkan berbilang mesin beroperasi pada sumber yang sama pada masa yang sama, sumber tersebut perlu dikunci. Kunci teragih ialah mekanisme untuk mengunci sumber yang dikongsi dalam sistem teragih. Kunci yang diedarkan perlu memastikan dua keperluan berikut:
1 Eksklusiviti bersama: Hanya seorang pelanggan boleh memegang kunci pada bila-bila masa.
2. Kemasukan Semula: Pelanggan yang sama boleh memperoleh kunci beberapa kali.
Terdapat banyak cara untuk melaksanakan kunci teragih, seperti menggunakan pangkalan data, menggunakan zookeeper, dsb. Artikel ini akan memperkenalkan kaedah menggunakan Redis untuk melaksanakan kunci teragih.
Prinsip Redis melaksanakan kunci teragih
Redis ialah sistem storan nilai kunci berprestasi tinggi yang menyokong pelbagai struktur data. Dalam Redis, arahan SET boleh digunakan untuk melaksanakan kunci yang diedarkan Prinsip pelaksanaannya adalah seperti berikut:
1.
2. Pelayan Redis memproses arahan SETNX yang diterima untuk menentukan sama ada kunci yang ditentukan wujud Jika ia tidak wujud, tetapkan nilai kunci kepada ID klien dan tetapkan masa tamat tempoh. Sekiranya wujud, kegagalan akan dikembalikan secara langsung.
3. Pelanggan menerima keputusan yang dikembalikan oleh Redis dan menentukan sama ada ia telah berjaya memperoleh kunci Jika berjaya, ia akan melakukan operasi yang sepadan, ia akan menunggu untuk tempoh masa hantar permintaan lagi.
Langkah untuk melaksanakan kunci teragih menggunakan Redis
1 Connect to Redis
Dalam PHP, menyambung ke Redis menggunakan sambungan PHPRedis, yang perlu dipasang sebelum ia boleh disambungkan. digunakan. Untuk kaedah pemasangan khusus, sila rujuk dokumentasi rasmi.
2. Dapatkan kunci
Laksanakan fungsi untuk memperoleh kunci seperti berikut:
protected function lock($lock_key, $expire_time = 5) { $redis = new Redis(); $redis->connect('localhost', 6379); // 连接Redis $micro_second = 1000000; $timeout = 10 * $micro_second; //等待锁超时时间 while($timeout >= 0) { $microtime = microtime(true); $timeout -= $micro_second; $current_lock_time = $microtime + $expire_time + 1; //锁过期时间 if($redis->setnx($lock_key, $current_lock_time)) //获取锁成功 { $redis->expire($lock_key, $expire_time); //设置过期时间,防止死锁 return $current_lock_time; } //检查锁是否过期 $lock_time = $redis->get($lock_key); if($lock_time < $microtime) { $new_lock_time = $microtime + $expire_time + 1; //设置新的过期时间 $old_lock_time = $redis->getset($lock_key, $new_lock_time); //获取旧的过期时间并设置新的过期时间 if($old_lock_time < $microtime) //锁已经过期,获取锁成功 { $redis->expire($lock_key, $expire_time); //设置过期时间,防止死锁 return $new_lock_time; } } //等待一段时间后再次尝试获取锁 usleep(10000); //等待10毫秒 } return false; }
Fungsi fungsi ini adalah untuk memperoleh kunci kunci yang ditentukan pemerolehan berjaya, ia mengembalikan kunci Masa tamat; jika pemerolehan gagal, kembali palsu.
3. Lepaskan kunci
Sama ada disebabkan oleh kejayaan menyelesaikan operasi selepas memperoleh kunci, atau kegagalan memperoleh kunci selepas menunggu tempoh masa, kunci perlu dilepaskan. Laksanakan fungsi untuk melepaskan kunci seperti berikut:
protected function unlock($lock_key, $current_lock_time) { $redis = new Redis(); $redis->connect('localhost', 6379); // 连接Redis $lock_time = $redis->get($lock_key); if($lock_time == $current_lock_time) //判断是否为当前持有锁的客户端 $redis->del($lock_key); //释放锁 }
Fungsi fungsi ini adalah untuk melepaskan kunci kunci yang ditentukan Hanya klien yang sedang memegang kunci boleh melepaskan kunci.
Nota
1. Masa tamat tempoh kunci hendaklah ditetapkan secara munasabah mengikut situasi sebenar. Jika masa tamat tempoh kunci terlalu singkat, kunci mungkin tamat tempoh atau kunci tidak boleh didapati dengan kerap; jika masa tamat tempoh kunci terlalu lama, masa tamat tempoh kunci mungkin terlalu lama, menjejaskan prestasi sistem.
2. Apabila menetapkan masa tamat tempoh, pastikan untuk mengelakkan kebuntuan. Jika seorang pelanggan memperoleh kunci, tetapi kunci tidak dilepaskan kerana keluar atau ranap yang tidak dijangka, ia akan menjejaskan pelanggan lain untuk memperoleh kunci itu, menyebabkan masalah kebuntuan.
3 Memandangkan pelaksanaan kunci yang diedarkan bergantung pada pengecam unik pelanggan, pelanggan yang berbeza perlu menggunakan pengecam yang berbeza, jika tidak, satu pelanggan boleh melepaskan kunci pelanggan lain. Dalam PHP, anda boleh menggunakan PHP_SESSION_ID atau alamat IP/ID proses sebagai pengecam unik klien.
Kesimpulan
Menggunakan Redis untuk melaksanakan kunci teragih ialah penyelesaian kunci teragih yang agak mudah dan praktikal dalam PHP. Dalam aplikasi praktikal, adalah perlu untuk menetapkan masa tamat tempoh kunci secara munasabah mengikut situasi sebenar untuk mengelakkan masalah kebuntuan dan memastikan kestabilan dan kebolehpercayaan sistem. Pada masa yang sama, perhatian perlu diberikan untuk memastikan keunikan pengecam unik pelanggan untuk mengelakkan masalah yang mungkin berlaku.
Atas ialah kandungan terperinci Menggunakan Redis untuk melaksanakan kunci teragih dalam PHP. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



Masa depan PHP akan dicapai dengan menyesuaikan diri dengan trend teknologi baru dan memperkenalkan ciri -ciri inovatif: 1) menyesuaikan diri dengan pengkomputeran awan, kontena dan seni bina microservice, menyokong Docker dan Kubernetes; 2) memperkenalkan pengkompil JIT dan jenis penghitungan untuk meningkatkan prestasi dan kecekapan pemprosesan data; 3) Berterusan mengoptimumkan prestasi dan mempromosikan amalan terbaik.

PHP dan Python masing -masing mempunyai kelebihan sendiri, dan pilihannya harus berdasarkan keperluan projek. 1.Php sesuai untuk pembangunan web, dengan sintaks mudah dan kecekapan pelaksanaan yang tinggi. 2. Python sesuai untuk sains data dan pembelajaran mesin, dengan sintaks ringkas dan perpustakaan yang kaya.

Mod Redis cluster menyebarkan contoh Redis ke pelbagai pelayan melalui sharding, meningkatkan skalabilitas dan ketersediaan. Langkah -langkah pembinaan adalah seperti berikut: Buat contoh Redis ganjil dengan pelabuhan yang berbeza; Buat 3 contoh sentinel, memantau contoh redis dan failover; Konfigurasi fail konfigurasi sentinel, tambahkan pemantauan maklumat contoh dan tetapan failover; Konfigurasi fail konfigurasi contoh Redis, aktifkan mod kluster dan tentukan laluan fail maklumat kluster; Buat fail nodes.conf, yang mengandungi maklumat setiap contoh Redis; Mulakan kluster, laksanakan perintah Buat untuk membuat kluster dan tentukan bilangan replika; Log masuk ke kluster untuk melaksanakan perintah maklumat kluster untuk mengesahkan status kluster; buat

PHP tidak mati, tetapi sentiasa menyesuaikan diri dan berkembang. 1) PHP telah menjalani beberapa lelaran versi sejak tahun 1994 untuk menyesuaikan diri dengan trend teknologi baru. 2) Ia kini digunakan secara meluas dalam e-dagang, sistem pengurusan kandungan dan bidang lain. 3) Php8 memperkenalkan pengkompil JIT dan fungsi lain untuk meningkatkan prestasi dan pemodenan. 4) Gunakan OPCACHE dan ikut piawaian PSR-12 untuk mengoptimumkan prestasi dan kualiti kod.

Menggunakan Arahan Redis memerlukan langkah -langkah berikut: Buka klien Redis. Masukkan arahan (nilai kunci kata kerja). Menyediakan parameter yang diperlukan (berbeza dari arahan ke arahan). Tekan Enter untuk melaksanakan arahan. Redis mengembalikan tindak balas yang menunjukkan hasil operasi (biasanya OK atau -r).

Langkah -langkah untuk memulakan pelayan Redis termasuk: Pasang Redis mengikut sistem operasi. Mulakan perkhidmatan Redis melalui Redis-server (Linux/macOS) atau redis-server.exe (Windows). Gunakan redis-cli ping (linux/macOS) atau redis-cli.exe ping (windows) perintah untuk memeriksa status perkhidmatan. Gunakan klien Redis, seperti redis-cli, python, atau node.js untuk mengakses pelayan.

Cara terbaik untuk memahami kod sumber REDIS adalah dengan langkah demi langkah: Dapatkan akrab dengan asas -asas Redis. Pilih modul atau fungsi tertentu sebagai titik permulaan. Mulakan dengan titik masuk modul atau fungsi dan lihat baris kod mengikut baris. Lihat kod melalui rantaian panggilan fungsi. Berhati -hati dengan struktur data asas yang digunakan oleh REDIS. Kenal pasti algoritma yang digunakan oleh Redis.

Cara Mengosongkan Data Redis: Gunakan perintah Flushall untuk membersihkan semua nilai utama. Gunakan perintah flushdb untuk membersihkan nilai utama pangkalan data yang dipilih sekarang. Gunakan Pilih untuk menukar pangkalan data, dan kemudian gunakan FlushDB untuk membersihkan pelbagai pangkalan data. Gunakan perintah DEL untuk memadam kunci tertentu. Gunakan alat REDIS-CLI untuk membersihkan data.
