Rumah Java javaTutorial Bagaimana untuk menggunakan kunci teragih dalam Java untuk mencapai penyegerakan sistem teragih?

Bagaimana untuk menggunakan kunci teragih dalam Java untuk mencapai penyegerakan sistem teragih?

Aug 03, 2023 am 08:43 AM
Kunci yang diedarkan kunci yang diedarkan java Penyegerakan sistem teragih

Bagaimana untuk menggunakan kunci teragih dalam Java untuk mencapai penyegerakan sistem teragih?

Pengenalan:
Dalam sistem yang diedarkan, konflik data dan masalah konkurensi mungkin berlaku apabila berbilang nod mengakses sumber dikongsi pada masa yang sama. Untuk memastikan ketekalan data, kami perlu menggunakan kunci teragih untuk mencapai penyegerakan sistem teragih. Java menyediakan pelbagai cara untuk melaksanakan kunci teragih Artikel ini akan memperkenalkan kaedah pelaksanaan kunci teragih berdasarkan ZooKeeper dan Redis, dengan contoh kod.

1. Pelaksanaan kunci teragih berdasarkan ZooKeeper
ZooKeeper ialah perkhidmatan penyelarasan teragih, yang menyediakan mekanisme kunci teragih untuk menyelesaikan masalah penyegerakan dalam sistem teragih. Berikut ialah kod sampel yang menggunakan ZooKeeper untuk melaksanakan kunci teragih:

import org.apache.zookeeper.*;

import java.io.IOException;
import java.util.Collections;
import java.util.List;

public class ZooKeeperDistributedLock implements Watcher {
    private ZooKeeper zooKeeper;
    private String lockPath;
    private String currentPath;
    private String waitPath;

    public ZooKeeperDistributedLock(String connectString, int sessionTimeout, String lockPath) throws IOException {
        zooKeeper = new ZooKeeper(connectString, sessionTimeout, this);
        this.lockPath = lockPath;
    }

    public void lock() throws KeeperException, InterruptedException {
        if (tryLock()) {
            return;
        }

        while (true) {
            List<String> children = zooKeeper.getChildren(lockPath, false);
            Collections.sort(children);

            int index = children.indexOf(currentPath.substring(lockPath.length() + 1));
            if (index == 0) {
                return;
            }

            waitPath = lockPath + "/" + children.get(index - 1);
            zooKeeper.exists(waitPath, true);
            synchronized (this) {
                wait();
            }
        }
    }

    public void unlock() throws KeeperException, InterruptedException {
        zooKeeper.delete(currentPath, -1);
    }

    private boolean tryLock() throws KeeperException, InterruptedException {
        currentPath = zooKeeper.create(lockPath + "/lock", new byte[0], ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL_SEQUENTIAL);
        List<String> children = zooKeeper.getChildren(lockPath, false);
        Collections.sort(children);
        if (currentPath.endsWith(children.get(0))) {
            return true;
        }
        String currentPathName = currentPath.substring(lockPath.length() + 1);
        int index = children.indexOf(currentPathName);
        if (index < 0) {
            throw new IllegalStateException("Node " + currentPathName + " no longer exists.");
        } else {
            waitPath = lockPath + "/" + children.get(index - 1);
            zooKeeper.exists(waitPath, true);
            synchronized (this) {
                wait();
            }
            return false;
        }
    }

    @Override
    public void process(WatchedEvent event) {
        if (waitPath != null && event.getType() == Event.EventType.NodeDeleted && event.getPath().equals(waitPath)) {
            synchronized (this) {
                notifyAll();
            }
        }
    }
}
Salin selepas log masuk

2. Pelaksanaan kunci teragih berasaskan Redis
Redis ialah sistem storan nilai kunci berprestasi tinggi yang menyediakan beberapa operasi atom untuk melaksanakan kunci teragih. Berikut ialah kod sampel yang menggunakan Redis untuk melaksanakan kunci teragih:

import redis.clients.jedis.Jedis;

public class RedisDistributedLock {
    private Jedis jedis;
    private String lockKey;
    private String requestId;

    public RedisDistributedLock(String host, int port, String password, String lockKey, String requestId) {
        jedis = new Jedis(host, port);
        jedis.auth(password);
        this.lockKey = lockKey;
        this.requestId = requestId;
    }

    public boolean lock(long expireTimeMillis) {
        String result = jedis.set(lockKey, requestId, "NX", "PX", expireTimeMillis);
        return "OK".equals(result);
    }

    public boolean unlock() {
        Long result = (Long) jedis.eval(
                "if redis.call('get', KEYS[1]) == ARGV[1] then " +
                "return redis.call('del', KEYS[1]) " +
                "else " +
                "return 0 " +
                "end",
                1,
                lockKey,
                requestId);
        return result != null && result == 1;
    }
}
Salin selepas log masuk

Kesimpulan:
Artikel ini memperkenalkan dua kaedah menggunakan kunci teragih dalam Java untuk mencapai penyegerakan sistem teragih: berdasarkan ZooKeeper dan Redis. Sama ada anda menggunakan ZooKeeper atau Redis, anda boleh mencapai penyegerakan sistem teragih dengan berkesan dan memastikan ketekalan data. Dalam projek sebenar, memilih penyelesaian kunci teragih yang sesuai mesti ditimbang berdasarkan keperluan khusus dan keperluan prestasi. Saya harap artikel ini berguna kepada anda, terima kasih kerana membaca!

Atas ialah kandungan terperinci Bagaimana untuk menggunakan kunci teragih dalam Java untuk mencapai penyegerakan sistem teragih?. 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)

Topik panas

Tutorial Java
1653
14
Tutorial PHP
1251
29
Tutorial C#
1224
24
Kunci yang diedarkan: 5 kes, dari kemasukan ke pengebumian Kunci yang diedarkan: 5 kes, dari kemasukan ke pengebumian Aug 24, 2023 pm 02:48 PM

Apa yang saya ingin kongsikan dengan anda hari ini ialah kunci yang diedarkan Artikel ini menggunakan lima kes, gambar rajah, analisis kod sumber, dll. untuk menganalisis. Kunci biasa seperti disegerakkan dan Kunci semuanya dilaksanakan berdasarkan JVM tunggal Apakah yang perlu kita lakukan dalam senario yang diedarkan? Pada masa ini, kunci yang diedarkan muncul.

Menggunakan ZooKeeper untuk pemprosesan kunci teragih dalam pembangunan API Java Menggunakan ZooKeeper untuk pemprosesan kunci teragih dalam pembangunan API Java Jun 17, 2023 pm 10:36 PM

Memandangkan aplikasi moden terus berkembang dan keperluan untuk ketersediaan dan keselarasan yang tinggi berkembang, seni bina sistem teragih menjadi lebih biasa. Dalam sistem teragih, berbilang proses atau nod berjalan pada masa yang sama dan menyelesaikan tugas bersama-sama, dan penyegerakan antara proses menjadi sangat penting. Memandangkan banyak nod dalam persekitaran teragih boleh mengakses sumber yang dikongsi pada masa yang sama, cara menangani isu konkurensi dan penyegerakan telah menjadi tugas penting dalam sistem teragih. Dalam hal ini, ZooKeeper telah menjadi penyelesaian yang sangat popular. ZooKee

Perbandingan Etcd dalam Redis pelaksanaan kunci yang diedarkan Perbandingan Etcd dalam Redis pelaksanaan kunci yang diedarkan Jun 20, 2023 pm 05:51 PM

Dengan mempopularkan sistem teragih secara beransur-ansur, kunci teragih telah menjadi cara penting untuk memastikan kestabilan sistem dan konsistensi data. Sebagai pangkalan data memori teragih berprestasi tinggi, Redis secara semula jadi menjadi salah satu pelaksanaan penting kunci teragih. Walau bagaimanapun, dalam beberapa tahun kebelakangan ini, Etcd telah menerima lebih banyak perhatian sebagai penyelesaian ketekalan teragih yang muncul. Artikel ini akan membincangkan persamaan dan perbezaan antara pelaksanaan kunci teragih Redis dan Etcd dari aspek seperti prinsip pelaksanaan dan analisis perbandingan. Prinsip Redis melaksanakan kunci teragih Pelaksanaan kunci teragih Redis

Penyelesaian raja antara kunci yang diedarkan - Redisson Penyelesaian raja antara kunci yang diedarkan - Redisson Aug 24, 2023 pm 03:31 PM

Jika anda pernah menggunakan Redis sebelum ini, anda akan mendapat hasil dua kali ganda dengan separuh usaha dengan menggunakan Redisson menyediakan cara yang paling mudah dan mudah untuk menggunakan Redis. Tujuan Redisson adalah untuk mempromosikan pengasingan kebimbangan pengguna (Separation of Concern) daripada Redis, supaya pengguna boleh memberi lebih tumpuan kepada memproses logik perniagaan.

Menggunakan Redis untuk melaksanakan kunci teragih dalam PHP Menggunakan Redis untuk melaksanakan kunci teragih dalam PHP May 15, 2023 pm 03:51 PM

Dengan perkembangan pesat Internet dan peningkatan mendadak dalam lawatan laman 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 konkurensi, 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 teragih, apabila berbilang mesin memproses tugas yang sama bersama-sama, untuk mengelakkan berlakunya berbilang mesin

Bagaimana untuk menggunakan kunci yang diedarkan untuk mengawal akses serentak dalam MySQL? Bagaimana untuk menggunakan kunci yang diedarkan untuk mengawal akses serentak dalam MySQL? Jul 30, 2023 pm 10:04 PM

Bagaimana untuk menggunakan kunci yang diedarkan untuk mengawal akses serentak dalam MySQL? Dalam sistem pangkalan data, akses serentak yang tinggi adalah masalah biasa, dan kunci yang diedarkan adalah salah satu penyelesaian biasa. Artikel ini akan memperkenalkan cara menggunakan kunci teragih dalam MySQL untuk mengawal akses serentak dan menyediakan contoh kod yang sepadan. 1. Kunci Diedarkan Prinsip boleh digunakan untuk melindungi sumber yang dikongsi untuk memastikan bahawa hanya satu utas boleh mengakses sumber pada masa yang sama. Dalam MySQL, kunci teragih boleh dilaksanakan dengan cara berikut: Cipta fail bernama lock_tabl

Penjelasan terperinci tentang pelaksanaan kunci teragih dalam Redis Penjelasan terperinci tentang pelaksanaan kunci teragih dalam Redis Jun 21, 2023 am 11:02 AM

Dengan perkembangan pesat Internet mudah alih dan pertumbuhan pesat volum data, sistem yang diedarkan menjadi semakin popular. Dalam sistem yang diedarkan, masalah operasi serentak telah menjadi lebih dan lebih menonjol Apabila beberapa utas meminta sumber dikongsi pada masa yang sama, sumber ini perlu dikunci untuk memastikan konsistensi data. Kunci teragih ialah salah satu penyelesaian berkesan untuk melaksanakan operasi serentak dalam sistem teragih Artikel ini akan memperkenalkan secara terperinci cara menggunakan Redis untuk melaksanakan kunci teragih. Asas Redis Redis ialah sistem storan nilai kunci berasaskan memori yang diedarkan

Perbandingan konsul pelaksanaan Redis bagi kunci yang diedarkan Perbandingan konsul pelaksanaan Redis bagi kunci yang diedarkan Jun 20, 2023 pm 02:38 PM

Perbandingan Konsul yang melaksanakan kunci teragih dalam Redis Dalam sistem teragih, kunci ialah mekanisme penyegerakan yang penting. Sebagai pangkalan data NoSQL yang biasa digunakan, fungsi kunci teragih yang disediakan oleh Redis telah mendapat perhatian dan aplikasi yang meluas. Walau bagaimanapun, Redis mempunyai masalah tertentu apabila melaksanakan kunci yang diedarkan, seperti pemerolehan semula kunci dan pemprosesan tamat masa, jadi beberapa alat baharu telah dibangunkan untuk menyelesaikan masalah ini, termasuk Konsul. Artikel ini akan melaksanakan kunci teragih dalam Redis dan melaksanakan Konsul

See all articles