Rumah > Java > javaTutorial > Pembangunan Java: cara melaksanakan kunci teragih dan kawalan konkurensi

Pembangunan Java: cara melaksanakan kunci teragih dan kawalan konkurensi

WBOY
Lepaskan: 2023-09-20 13:55:49
asal
1129 orang telah melayarinya

Pembangunan Java: cara melaksanakan kunci teragih dan kawalan konkurensi

Pembangunan Java: Cara melaksanakan kunci teragih dan kawalan konkurensi, contoh kod khusus diperlukan

Pengenalan:
Dalam sistem teragih, berbilang nod boleh mengakses sumber dikongsi pada masa yang sama, jadi kawalan konkurensi diperlukan untuk mengelakkan data konsisten Isu seksual. Dalam artikel ini, kami akan memperkenalkan cara menggunakan kunci teragih untuk kawalan serentak dan memberikan contoh kod Java tertentu.

1. Pengenalan kepada kunci yang diedarkan:
Kunci yang diedarkan ialah mekanisme yang digunakan untuk mengawal akses serentak . Ini boleh mengelakkan masalah ketidakkonsistenan data yang disebabkan oleh berbilang nod yang mengakses sumber yang dikongsi secara serentak.

2. Cara untuk melaksanakan kunci teragih:

  1. Kunci teragih berasaskan pangkalan data: Anda boleh menggunakan mekanisme transaksi dan kunci pangkalan data untuk mencipta jadual untuk bertindak sebagai kunci. Kunci diperoleh dengan memasukkan rekod ke dalam jadual, dan kunci dilepaskan dengan memadamkan rekod. Kelebihan kaedah ini ialah ia mudah dan mudah digunakan, tetapi kelemahannya ialah prestasinya agak lemah.
  2. Kunci teragih berasaskan cache: Gunakan cache teragih, seperti Redis atau ZooKeeper, untuk melaksanakan kunci teragih. Dapatkan kunci dengan menetapkan nilai kunci dalam cache, dan padamkan kunci untuk melepaskan kunci. Kelebihan kaedah ini adalah prestasi yang lebih baik, tetapi kelemahannya ialah ia bergantung pada sistem cache.
  3. Kunci teragih berdasarkan ZooKeeper: ZooKeeper ialah perkhidmatan penyelarasan teragih yang boleh digunakan untuk melaksanakan kunci teragih. Setiap nod mencipta nod jujukan sementara pada ZooKeeper dan cuba mendapatkan nod dengan nombor jujukan terkecil Jika berjaya diperoleh, ini bermakna kunci yang diedarkan telah diperolehi. Kelebihan kaedah ini adalah kebolehpercayaan yang lebih tinggi, tetapi kelemahannya adalah kerumitan yang lebih tinggi.

3 Contoh kod:
Kami mengambil kunci yang diedarkan berdasarkan Redis sebagai contoh dan memberikan contoh kod Java berikut:
Pertama, kita perlu memperkenalkan kebergantungan jedis, seperti yang ditunjukkan di bawah:

<dependency>
  <groupId>redis.clients</groupId>
  <artifactId>jedis</artifactId>
  <version>3.5.3</version>
</dependency>
Salin selepas log masuk

Kemudian, kita boleh buat kelas alat RedisLockUtil , untuk melaksanakan logik memperoleh dan melepaskan kunci yang diedarkan Kod khusus adalah seperti berikut:

import redis.clients.jedis.Jedis;
import redis.clients.jedis.params.SetParams;

public class RedisLockUtil {
    private static final String LOCK_KEY = "distributed_lock";
    private static final String LOCK_VALUE = "locked";
    
    private Jedis jedis;
    private String lockId;

    public RedisLockUtil() {
        jedis = new Jedis("localhost");
    }

    public boolean lock() {
        SetParams params = new SetParams().nx().ex(10); // 设置锁的超时时间为10秒
        String result = jedis.set(LOCK_KEY, LOCK_VALUE, params);
        if ("OK".equals(result)) {
            lockId = LOCK_VALUE;
            return true;
        }
        return false;
    }

    public boolean unlock() {
        if (lockId.equals(jedis.get(LOCK_KEY))) {
            jedis.del(LOCK_KEY);
            return true;
        }
        return false;
    }
}
Salin selepas log masuk

Seterusnya, kita boleh menggunakan kelas RedisLockUtil untuk melaksanakan operasi pemerolehan dan pelepasan contoh khusus ialah seperti berikut:

public class Main {
    public static void main(String[] args) {
        RedisLockUtil lockUtil = new RedisLockUtil();
        if (lockUtil.lock()) {
            try {
                // 获取到锁,执行操作
                System.out.println("执行操作");
            } finally {
                lockUtil.unlock(); // 释放锁
            }
        } else {
            // 未获取到锁,执行其他操作
            System.out.println("执行其他操作");
        }
    }
}
Salin selepas log masuk

Melalui contoh Kod di atas, kami boleh melaksanakan operasi memperoleh dan melepaskan kunci teragih dalam persekitaran teragih.

Kesimpulan:
Kunci teragih ialah teknologi penting dan memainkan peranan penting dalam pembangunan sistem teragih. Artikel ini memperkenalkan konsep dan pelaksanaan kunci yang diedarkan, dan menyediakan contoh kod khusus berdasarkan Redis. Saya berharap dengan membaca artikel ini, pembaca dapat memahami dan menggunakan kunci teragih untuk kawalan serentak, dengan itu meningkatkan prestasi dan ketekalan data sistem teragih.

Atas ialah kandungan terperinci Pembangunan Java: cara melaksanakan kunci teragih dan kawalan konkurensi. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan