Rumah > Artikel > pangkalan data > Prinsip dan kaedah pelaksanaan kunci teragih yang dilaksanakan oleh Redis
Dengan populariti sistem yang diedarkan, kunci yang diedarkan menjadi semakin penting. Kunci teragih ialah mekanisme yang memastikan hanya satu proses atau benang boleh beroperasi pada masa yang sama dalam sistem teragih. Kunci teragih adalah masalah yang sangat biasa dalam banyak aplikasi dalam persekitaran teragih. Redis ialah pangkalan data dalam memori berprestasi tinggi yang menyokong pelbagai struktur data dan digunakan secara meluas dalam kunci teragih. Artikel ini akan memperkenalkan prinsip dan kaedah pelaksanaan kunci teragih yang dilaksanakan oleh Redis.
1. Prinsip Redis melaksanakan kunci teragih
Melaksanakan kunci dalam sistem teragih memerlukan penyelesaian beberapa masalah, seperti cara mencapai pengecualian bersama, cara memastikan konsistensi, dsb. Untuk Redis melaksanakan kunci yang diedarkan, prinsip utama adalah untuk memastikan penguncian dan konsistensi bersama kunci melalui transaksi Redis. Transaksi Redis menyediakan keupayaan untuk membungkus berbilang perintah ke dalam transaksi dan kemudian melaksanakannya sekaligus. Apabila mengeluarkan transaksi, pelayan akan mula merekodkan urutan arahan Redis yang dilaksanakan oleh transaksi.
Oleh itu, Redis terutamanya mempunyai tiga langkah berikut untuk melaksanakan kunci teragih:
1 Cuba dapatkan kunci
Dalam Redis, anda boleh menggunakan arahan SETNX (SET. if Not eXists ) untuk menentukan sama ada kunci wujud Jika ia tidak wujud, ia mengembalikan 1 dan menetapkan nilai kunci Jika kunci itu sudah wujud, ia mengembalikan 0. Oleh itu, arahan SETNX boleh digunakan untuk melaksanakan proses memperoleh kunci.
2. Tetapkan tamat masa kunci
Untuk mengelakkan penguncian, anda perlu menetapkan tamat masa untuk kunci Apabila pemegang kunci tidak melepaskan kunci selepas satu tempoh masa kunci akan dilepaskan secara paksa.
3. Lepaskan kunci
Gunakan arahan DEL dalam transaksi Redis untuk melepaskan kunci dan padamkan kunci kunci daripada Redis.
2. Bagaimana Redis melaksanakan kunci teragih
Melalui pengenalan langkah-langkah di atas, kita dapat mengetahui bahawa prinsip utama Redis melaksanakan kunci teragih adalah untuk mengambil kunci melalui arahan SETNX, dengan itu lulus transaksi untuk melaksanakan operasi mengunci dan membuka kunci. Atas dasar ini, kami akan memperkenalkan dua cara untuk melaksanakan kunci teragih dalam Redis: berdasarkan nod tunggal Redis dan berdasarkan kelompok Redis.
1. Berdasarkan nod tunggal Redis
Kami boleh dengan mudah melaksanakan kunci teragih berdasarkan nod tunggal Redis dengan hanya menggunakan arahan Redis SETNX dan DEL adalah seperti berikut.
public Boolean tryLock(String key, String value, long expireTime) { Jedis jedis = jedisPool.getResource(); String result = jedis.set(key, value, "NX", "PX", expireTime); jedis.close(); return "OK".equalsIgnoreCase(result); }
di mana key
ialah sumber yang perlu dikunci, value
ialah pengecam unik kunci dan expireTime
ialah tamat masa kunci.
Untuk proses cuba mendapatkan kunci, anda boleh cuba menetapkan kunci yang tidak wujud melalui arahan SetNX. Jika kunci wujud, ini bermakna kunci telah diperoleh oleh pelanggan lain. Selepas kunci berjaya dikunci, pengenalan kunci dan masa tamat masa perlu ditetapkan. Pada masa yang sama, adalah perlu untuk memastikan bahawa pemegang kunci mempunyai peluang untuk melepaskan kunci sebelum tempoh tamat masa dicapai, jika tidak, kunci akan dilepaskan secara paksa.
2. Berdasarkan gugusan Redis
Dalam persekitaran gugusan Redis, pelaksanaan berdasarkan satu nod tidak dapat memenuhi keperluan ketersediaan yang tinggi. Oleh itu, kita perlu melaksanakan kunci teragih berdasarkan kluster Redis melalui mod Kluster Redis.
Dalam mod Kluster Redis, Redis membahagikan nod dalam kluster kepada slot berbeza dan setiap slot menyimpan pasangan nilai kunci yang berbeza. Oleh itu, kami boleh memperuntukkan kunci yang berbeza kepada slot yang berbeza untuk mencapai ketersediaan tinggi kunci yang diedarkan. Dalam mod Kluster Redis, kod untuk Redis melaksanakan kunci teragih adalah seperti berikut.
public boolean tryLock(String key, String value, int expireTime) { JedisCluster jedisCluster = jedisClusterFactory.getJedisCluster(); String result = jedisCluster.set(key, value, "NX", "PX", expireTime); return "OK".equalsIgnoreCase(result); }
di mana key
ialah sumber yang perlu dikunci, value
ialah pengecam unik kunci dan expireTime
ialah tamat masa kunci.
Dalam mod Kluster Redis, arahan SET akan menyimpan kunci dan nilai ke nod yang betul. Dengan membezakan kunci dalam slot yang berbeza, kami boleh mencapai ketersediaan tinggi kunci teragih dan mengelakkan satu titik kegagalan.
3. Ringkasan
Artikel ini terutamanya memperkenalkan prinsip dan kaedah pelaksanaan kunci teragih dalam Redis Kunci teragih berdasarkan nod tunggal Redis boleh direalisasikan dengan hanya menggunakan arahan SETNX dan DEL. Dalam mod Kluster Redis, kami boleh memperuntukkan kunci berbeza kepada slot berbeza untuk mencapai ketersediaan kunci teragih yang tinggi dan mengelakkan satu titik kegagalan. Pelaksanaan kunci teragih perlu mengambil kira banyak faktor, termasuk pengecualian bersama kunci, konsistensi dan ketersediaan yang tinggi. Dalam aplikasi praktikal, adalah perlu untuk memilih kaedah pelaksanaan kunci yang sesuai mengikut situasi tertentu.
Atas ialah kandungan terperinci Prinsip dan kaedah pelaksanaan kunci teragih yang dilaksanakan oleh Redis. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!