Rumah  >  Artikel  >  pangkalan data  >  Cara menggunakan Redis untuk mencapai ketersediaan tinggi kunci teragih

Cara menggunakan Redis untuk mencapai ketersediaan tinggi kunci teragih

PHPz
PHPzasal
2023-11-07 09:17:04937semak imbas

Cara menggunakan Redis untuk mencapai ketersediaan tinggi kunci teragih

Cara menggunakan Redis untuk mencapai ketersediaan tinggi kunci teragih memerlukan contoh kod khusus

1 Pengenalan
Dalam sistem yang diedarkan, memandangkan berbilang proses atau rangkaian boleh mengakses sumber dikongsi pada masa yang sama, masalah persaingan sumber akan timbul. Untuk menyelesaikan masalah ini, kunci yang diedarkan perlu diperkenalkan untuk akses yang saling eksklusif kepada sumber. Sebagai pangkalan data dalam memori, Redis menyediakan pelaksanaan kunci yang diedarkan dan mempunyai ketersediaan yang tinggi. Artikel ini akan memperkenalkan cara menggunakan Redis untuk mencapai ketersediaan tinggi kunci teragih dan memberikan contoh kod khusus.

2. Prinsip asas kunci teragih
Prinsip asas kunci teragih adalah untuk memperkenalkan mekanisme pengecualian bersama dalam proses capaian sumber yang dikongsi untuk memastikan hanya satu proses atau utas boleh mengakses sumber pada masa yang sama. Redis menyediakan dua kaedah pelaksanaan klasik: pelaksanaan berasaskan contoh tunggal dan pelaksanaan berasaskan kluster Redis. Artikel ini terutamanya memperkenalkan kaedah pelaksanaan berdasarkan kelompok Redis.

3. Pelaksanaan kunci teragih berdasarkan kelompok Redis

  1. Proses memperoleh kunci
    Dalam Redis, proses memperoleh kunci teragih boleh dicapai melalui perintah setnx (set jika tidak wujud). Langkah-langkah khusus adalah seperti berikut:
    (1) Cuba dapatkan kunci melalui arahan setnx Jika 1 dikembalikan, ia bermakna kunci telah berjaya diperolehi
    (2) Jika 0 dikembalikan, ia bermakna kunci telah dipegang oleh proses atau rangkaian lain dan perlu memasuki keadaan menunggu atau mencuba semula.
  2. Proses melepaskan kunci
    Proses melepaskan kunci dilaksanakan terutamanya melalui arahan del. Langkah-langkah khusus adalah seperti berikut:
    (1) Padamkan kunci melalui arahan del.
  3. Jaminan ketersediaan tinggi
    Apabila menggunakan Redis untuk melaksanakan kunci yang diedarkan, isu seperti kemasukan semula kunci dan pengesanan jalan buntu perlu dipertimbangkan untuk memastikan ketersediaan yang tinggi. Masalah kebuntuan boleh dielakkan dengan menetapkan masa luput untuk kunci. Pada masa yang sama, skrip Lua boleh digunakan untuk mencapai atomicity operasi di atas dan mengelakkan masalah bukan kemasukan semula.

4 Contoh Kod
Berikut ialah contoh kod yang menggunakan bahasa Java untuk melaksanakan kunci teragih berdasarkan kelompok Redis:

public class DistributedLock {
    private static final String LOCK_KEY = "redis_lock";
    private static final int EXPIRE_TIME = 5000; // 锁的过期时间,单位毫秒
    private static final int TIMEOUT = 10000; // 获取锁的超时时间,单位毫秒
    
    private JedisCluster jedisCluster;
    private String lockValue; // 锁的唯一标识,用于后续释放锁

    public DistributedLock(JedisCluster jedisCluster) {
        this.jedisCluster = jedisCluster;
    }

    public boolean lock() {
        long start = System.currentTimeMillis();
        try {
            // 循环获取锁,直到超时
            while (System.currentTimeMillis() - start < TIMEOUT) {
                lockValue = UUID.randomUUID().toString();
                String result = jedisCluster.set(LOCK_KEY, lockValue, "NX", "PX", EXPIRE_TIME);
                if ("OK".equals(result)) {
                    return true;
                }
                Thread.sleep(100); // 等待一段时间后重试
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return false;
    }

    public void unlock() {
        try {
            String value = jedisCluster.get(LOCK_KEY);
            if (lockValue.equals(value)) {
                jedisCluster.del(LOCK_KEY);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

Apabila menggunakan kod di atas, anda boleh mendapatkan kunci dengan memanggil kaedah lock() dan selepas mendapat kunci Jalankan blok kod yang memerlukan akses eksklusif bersama, dan akhirnya lepaskan kunci dengan memanggil kaedah buka kunci().

5. Ringkasan
Dengan menggunakan Redis untuk melaksanakan kunci yang diedarkan, masalah persaingan sumber dapat diselesaikan dengan berkesan. Artikel ini memperkenalkan prinsip pelaksanaan kunci teragih berdasarkan kelompok Redis dan memberikan contoh kod khusus. Apabila menggunakan kunci yang diedarkan, isu seperti kemasukan semula dan pengesanan jalan buntu juga perlu dipertimbangkan untuk memastikan ketersediaan yang tinggi. Saya harap artikel ini akan membantu pembaca dalam melaksanakan kunci teragih dalam projek sebenar.

Atas ialah kandungan terperinci Cara menggunakan Redis untuk mencapai ketersediaan tinggi kunci teragih. 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