Rumah pangkalan data Redis Cara membangunkan fungsi kunci teragih menggunakan Redis dan Java

Cara membangunkan fungsi kunci teragih menggunakan Redis dan Java

Sep 21, 2023 am 08:40 AM
java redis Kunci yang diedarkan

Cara membangunkan fungsi kunci teragih menggunakan Redis dan Java

Cara menggunakan Redis dan Java untuk membangunkan fungsi kunci teragih

  1. Pengenalan
    Kunci teragih ialah mekanisme untuk mencapai akses eksklusif bersama kepada sumber kongsi dalam sistem teragih. Apabila berbilang nod mengakses sumber yang dikongsi pada masa yang sama, adalah perlu untuk memastikan bahawa hanya satu nod sedang mengakses dan nod lain perlu menunggu. Redis ialah pangkalan data dalam memori yang biasa digunakan dengan prestasi tinggi dan kebolehpercayaan yang tinggi, dan sangat sesuai untuk melaksanakan kunci teragih.
  2. Arahan setnx Redis
    Arahan setnx Redis boleh digunakan untuk menetapkan nilai kunci, tetapi operasi tetapan hanya akan dilakukan apabila kunci tidak wujud. Ciri ini boleh digunakan untuk melaksanakan operasi pemerolehan kunci teragih. Gunakan arahan setnx untuk cuba menetapkan kunci dengan masa tamat tempoh. Jika tetapan itu berjaya, ini bermakna kunci telah berjaya diperolehi.
  3. Contoh kod Java
    Berikut ialah contoh kod yang menggunakan bahasa Java dan Redis untuk melaksanakan kunci teragih:
import redis.clients.jedis.Jedis;

public class DistributedLock {
    private static final String LOCK_KEY = "distributed_lock";
    private static final int LOCK_TIMEOUT = 3 * 1000; // 锁的超时时间,单位为毫秒
    
    private Jedis jedis;

    public DistributedLock(Jedis jedis) {
        this.jedis = jedis;
    }

    public boolean lock() {
        long start = System.currentTimeMillis();
        try {
            while (true) {
                String result = jedis.set(LOCK_KEY, "locked", "NX", "PX", LOCK_TIMEOUT);
                if ("OK".equals(result)) {
                    return true;
                } else {
                    // 进行重试
                    Thread.sleep(100);
                }
                long end = System.currentTimeMillis();
                if (end - start > LOCK_TIMEOUT) {
                    // 超时退出
                    return false;
                }
            }
        } catch (InterruptedException e) {
            Thread.currentThread().interrupt();
            return false;
        }
    }

    public void unlock() {
        jedis.del(LOCK_KEY);
    }
}
Salin selepas log masuk
  1. Contoh penerangan
    Dalam kod contoh di atas, perpustakaan Jedis digunakan untuk mengendalikan Redis. Mula-mula, LOCK_KEY tetap ditakrifkan sebagai kunci kunci yang diedarkan ini mesti kekal unik di antara semua nod. Selain itu, pemalar LOCK_TIMEOUT ditetapkan untuk mewakili tamat masa kunci. LOCK_KEY作为分布式锁的键,这个键在所有节点中必须保持唯一。另外,设置了一个LOCK_TIMEOUT常量来表示锁的超时时间。

lock方法中,首先获取当前时间作为开始时间,然后使用一个无限循环来尝试获取分布式锁。在循环中,使用Redis的set命令进行设置操作,设置键为LOCK_KEY,值为"locked",并且设置了NXPX选项,NX表示只有键不存在时才执行设置操作,PX表示设置键的过期时间为LOCK_TIMEOUT毫秒。

如果设置成功,则表示获取锁成功,方法返回true;否则继续进行重试,每次重试时会等待100毫秒。同时,还需要判断获取锁的时间是否超过了LOCK_TIMEOUT的值,如果超过则表示获取锁的等待时间已经过长,放弃获取锁,并返回false

unlock方法中,通过调用del

    Dalam kaedah kunci, mula-mula dapatkan masa semasa sebagai masa mula, dan kemudian gunakan gelung tak terhingga untuk cuba memperoleh kunci yang diedarkan. Dalam gelung, gunakan perintah set Redis untuk melaksanakan operasi tetapan Kekunci set ialah LOCK_KEY, nilainya "dikunci" dan NX. dan pilihan PX, NX bermaksud operasi tetapan hanya dilakukan apabila kunci tidak wujud, PX bermaksud masa tamat tempoh set kunci ialah LOCK_TIMEOUT</ code>milisaat. <li><br>Jika tetapan berjaya, ini bermakna kunci berjaya diperoleh, dan kaedah mengembalikan <code>true jika tidak, teruskan mencuba semula dan akan menunggu selama 100 milisaat untuk setiap percubaan semula. Pada masa yang sama, adalah perlu juga untuk menentukan sama ada masa untuk memperoleh kunci melebihi nilai LOCK_TIMEOUT Jika melebihi, ini bermakna masa menunggu untuk memperoleh kunci telah terlalu lama. berputus asa untuk mendapatkan kunci, dan kembalikan false .
Dalam kaedah unlock, padamkan kunci kunci yang diedarkan dengan memanggil perintah del.

    Contoh panggilan
  1. Berikut ialah contoh panggilan menggunakan kod sampel:
  2. import redis.clients.jedis.Jedis;
    
    public class LockTest {
        public static void main(String[] args) {
            Jedis jedis = new Jedis("localhost");
            DistributedLock lock = new DistributedLock(jedis);
            try {
                if (lock.lock()) {
                    // 获取到分布式锁后执行需要保护的代码
                    System.out.println("获取到分布式锁");
                    // ... 执行需要保护的代码
                } else {
                    System.out.println("获取分布式锁失败");
                }
            } finally {
                lock.unlock();
            }
        }
    }
    Salin selepas log masuk
    Dalam contoh panggilan, objek sambungan Jedis mula-mula dibuat, kemudian objek DistributedLock dicipta dan objek sambungan Jedis dihantar sebagai satu parameter. Dalam blok cuba-akhir, mula-mula cuba dapatkan kunci teragih Jika berjaya, keluarkan "mendapat kunci teragih", jalankan kod yang perlu dilindungi, dan kemudian lepaskan kunci teragih dalam blok akhirnya. 🎜🎜🎜Ringkasan🎜Dengan menggunakan pembangunan Redis dan Java, kami boleh melaksanakan fungsi kunci yang diedarkan dengan mudah. Operasi pemerolehan kunci boleh dilaksanakan menggunakan arahan setnx Redis, dan kod Java boleh dengan mudah memanggil arahan Redis dan merangkumnya ke dalam kelas kunci yang diedarkan. Dalam aplikasi sebenar, tamat masa kunci yang diedarkan boleh dilaraskan mengikut keperluan untuk memastikan bahawa masa menunggu untuk memperoleh kunci tidak akan terlalu lama, dengan itu meningkatkan prestasi dan keselarasan sistem. 🎜🎜

    Atas ialah kandungan terperinci Cara membangunkan fungsi kunci teragih menggunakan Redis dan Java. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
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

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Cara Membina Mod Kluster Redis Cara Membina Mod Kluster Redis Apr 10, 2025 pm 10:15 PM

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 vs Python: Memahami Perbezaan PHP vs Python: Memahami Perbezaan Apr 11, 2025 am 12:15 AM

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.

PHP: Bahasa utama untuk pembangunan web PHP: Bahasa utama untuk pembangunan web Apr 13, 2025 am 12:08 AM

PHP adalah bahasa skrip yang digunakan secara meluas di sisi pelayan, terutamanya sesuai untuk pembangunan web. 1.PHP boleh membenamkan HTML, memproses permintaan dan respons HTTP, dan menyokong pelbagai pangkalan data. 2.PHP digunakan untuk menjana kandungan web dinamik, data borang proses, pangkalan data akses, dan lain -lain, dengan sokongan komuniti yang kuat dan sumber sumber terbuka. 3. PHP adalah bahasa yang ditafsirkan, dan proses pelaksanaan termasuk analisis leksikal, analisis tatabahasa, penyusunan dan pelaksanaan. 4.Php boleh digabungkan dengan MySQL untuk aplikasi lanjutan seperti sistem pendaftaran pengguna. 5. Apabila debugging php, anda boleh menggunakan fungsi seperti error_reporting () dan var_dump (). 6. Mengoptimumkan kod PHP untuk menggunakan mekanisme caching, mengoptimumkan pertanyaan pangkalan data dan menggunakan fungsi terbina dalam. 7

Cara membersihkan data redis Cara membersihkan data redis Apr 10, 2025 pm 10:06 PM

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.

PHP vs Bahasa Lain: Perbandingan PHP vs Bahasa Lain: Perbandingan Apr 13, 2025 am 12:19 AM

PHP sesuai untuk pembangunan web, terutamanya dalam pembangunan pesat dan memproses kandungan dinamik, tetapi tidak baik pada sains data dan aplikasi peringkat perusahaan. Berbanding dengan Python, PHP mempunyai lebih banyak kelebihan dalam pembangunan web, tetapi tidak sebaik python dalam bidang sains data; Berbanding dengan Java, PHP melakukan lebih buruk dalam aplikasi peringkat perusahaan, tetapi lebih fleksibel dalam pembangunan web; Berbanding dengan JavaScript, PHP lebih ringkas dalam pembangunan back-end, tetapi tidak sebaik JavaScript dalam pembangunan front-end.

Cara Membaca Gilir Redis Cara Membaca Gilir Redis Apr 10, 2025 pm 10:12 PM

Untuk membaca giliran dari Redis, anda perlu mendapatkan nama giliran, membaca unsur -unsur menggunakan arahan LPOP, dan memproses barisan kosong. Langkah-langkah khusus adalah seperti berikut: Dapatkan nama giliran: Namakannya dengan awalan "giliran:" seperti "giliran: my-queue". Gunakan arahan LPOP: Keluarkan elemen dari kepala barisan dan kembalikan nilainya, seperti LPOP Queue: My-Queue. Memproses Baris kosong: Jika barisan kosong, LPOP mengembalikan nihil, dan anda boleh menyemak sama ada barisan wujud sebelum membaca elemen.

PHP: asas banyak laman web PHP: asas banyak laman web Apr 13, 2025 am 12:07 AM

Sebab mengapa PHP adalah timbunan teknologi pilihan untuk banyak laman web termasuk kemudahan penggunaannya, sokongan komuniti yang kuat, dan penggunaan yang meluas. 1) Mudah dipelajari dan digunakan, sesuai untuk pemula. 2) Mempunyai komuniti pemaju yang besar dan sumber yang kaya. 3) Digunakan secara meluas dalam platform WordPress, Drupal dan lain -lain. 4) Mengintegrasikan dengan ketat dengan pelayan web untuk memudahkan penggunaan pembangunan.

PHP vs Python: Ciri dan Fungsi Teras PHP vs Python: Ciri dan Fungsi Teras Apr 13, 2025 am 12:16 AM

PHP dan Python masing -masing mempunyai kelebihan sendiri dan sesuai untuk senario yang berbeza. 1.PHP sesuai untuk pembangunan web dan menyediakan pelayan web terbina dalam dan perpustakaan fungsi yang kaya. 2. Python sesuai untuk sains data dan pembelajaran mesin, dengan sintaks ringkas dan perpustakaan standard yang kuat. Apabila memilih, ia harus diputuskan berdasarkan keperluan projek.

See all articles