Rumah Java javaTutorial Cache pemuatan malas dalam teknologi caching Java

Cache pemuatan malas dalam teknologi caching Java

Jun 20, 2023 pm 12:24 PM
java Malas memuatkan teknologi caching

Cache lazy loading dalam teknologi caching Java

Dalam bulatan Java, teknologi caching ialah teknologi yang sangat biasa. Tujuan caching adalah untuk meningkatkan prestasi capaian data dan mengelakkan pengiraan berulang dan permintaan berulang. Teknologi caching mempunyai pelbagai senario aplikasi, terutamanya dalam aplikasi yang memerlukan akses kerap kepada data, seperti tapak web e-dagang, portal berita, aplikasi sosial, dsb.

Walau bagaimanapun, teknologi caching juga mempunyai beberapa kelemahan, seperti: permulaan cache dan kemas kini mungkin memakan banyak masa dan sumber prestasi. Oleh itu, untuk meningkatkan prestasi dan kecekapan cache, teknologi yang dipanggil "pemuatan malas cache" telah muncul, yang boleh menyelesaikan masalah permulaan dan kemas kini cache dengan berkesan, dengan itu meningkatkan prestasi dan kecekapan sistem.

Apakah pemuatan malas dicache?

Pemuatan malas cache bermakna menangguhkan permulaan data cache dan menunggu akses pertama sebelum memuatkan data ke dalam cache. Kelebihan teknologi ini ialah ia boleh mengelakkan operasi permulaan dan kemas kini yang tidak perlu, dengan itu mengurangkan overhed sistem dan penggunaan sumber. Sudah tentu, kelemahan pemuatan malas cache ialah ia mungkin menyebabkan beberapa kelewatan semasa akses pertama, tetapi dalam kebanyakan senario aplikasi, kelewatan ini boleh diterima. Oleh itu, teknologi pemuatan malas cache adalah teknologi yang sangat biasa dalam banyak aplikasi.

Cara melaksanakan cache lazy loading

Di Java, terdapat banyak cara untuk melaksanakan cache lazy loading Di sini kami memperkenalkan beberapa kaedah pelaksanaan biasa.

Kaedah 1: Gunakan ConcurrentHashMap dan Future untuk melaksanakan

ConcurrentHashMap ialah jadual cincang selamat benang yang diperkenalkan dalam JDK 1.5, yang boleh digunakan untuk menyimpan data cache, manakala Future boleh digunakan untuk memuatkan data secara tak segerak.

Kaedah pelaksanaan khusus adalah seperti berikut:

public class MyCache {
    private final Map<String, Future<String>> cache = new ConcurrentHashMap<>();
    private final Function<String, String> loadDataFunction;

    public MyCache(Function<String, String> loadDataFunction) {
        this.loadDataFunction = loadDataFunction;
    }

    public String getData(String key) throws ExecutionException, InterruptedException {
        Future<String> future = cache.get(key);

        if (future == null) {
            Callable<String> callable = () -> loadDataFunction.apply(key);
            FutureTask<String> futureTask = new FutureTask<>(callable);
            future = cache.putIfAbsent(key, futureTask);  
            if (future == null) {
                future = futureTask;
                futureTask.run();
            }
        }
        return future.get();
    }
}
Salin selepas log masuk

Kaedah pelaksanaan ini agak mudah, dan proses umum adalah seperti berikut:

  1. Cuba dapatkan Masa Depan nilai kunci yang ditentukan daripada cache;
  2. Jika nilai Masa Depan adalah batal, ini bermakna data yang sepadan belum dicache, muatkan data melalui loadDataFunction, masukkannya ke dalam objek FutureTask, dan masukkan ke dalam cache;
  3. Jika sisipan berjaya (iaitu, sebelum Tiada utas lain telah memasukkan kunci), kemudian jalankan FutureTask untuk memuatkan data secara tak segerak; sepadan dengan kunci yang ditentukan dalam cache.
  4. Kaedah 2: Gunakan Penguncian Disemak Dua Kali untuk mencapai

Penguncian Disemak Dua Kali ialah teknik pengaturcaraan berbilang benang biasa yang boleh mengelakkan persaingan kunci berulang dan dengan itu meningkatkan prestasi sistem. Dalam pemuatan malas cache, anda boleh menggunakan teknik Penguncian Disemak Dua Kali untuk mencapai kesan permulaan tertunda.

Kaedah pelaksanaan khusus adalah seperti berikut:

public class MyCache {
    private Map<String, String> cache = null;

    public String getData(String key) {
        String data = cache.get(key);
        if (data == null) {
            synchronized (this) {
                data = cache.get(key);

                if (data == null) {
                    data = loadData(key);
                    cache.put(key, data);
                }
            }
        }
        return data;
    }

    private String loadData(String key) {
        // TODO: load data from database or remote API
        return "data";
    }
}
Salin selepas log masuk

Kaedah pelaksanaan ini agak mudah, dan proses umum adalah seperti berikut:

Cuba dapatkan nilai daripada kunci yang ditentukan daripada cache;
  1. Jika nilainya adalah batal, laksanakan blok kod yang disegerakkan; null, panggil kaedah loadData untuk memuatkan data dan simpannya dalam Dalam cache
  2. Akhir sekali, kembalikan data yang sepadan dengan kunci yang ditentukan.
  3. Kaedah 3: Gunakan AtomicReference untuk mencapai
  4. AtomicReference ialah kelas operasi atom yang diperkenalkan dalam JDK 1.5, yang boleh digunakan untuk mencapai kesan pemuatan malas cache.

Kaedah pelaksanaan khusus adalah seperti berikut:

public class MyCache {
    private final Map<String, String> cache = new ConcurrentHashMap<>();
    private final AtomicReference<Map<String, String>> reference =
            new AtomicReference<>(null);

    public String getData(String key) {
        Map<String, String> currentCache = reference.get();

        if (currentCache == null) {
            currentCache = cache;
            reference.compareAndSet(null, currentCache);
        }

        return currentCache.computeIfAbsent(key, k -> loadData(k));
    }

    private String loadData(String key) {
        // TODO: load data from database or remote API
        return "data";
    }
}
Salin selepas log masuk

Kaedah pelaksanaan ini agak rumit, dan proses umum adalah seperti berikut:

Cuba baca cache data yang ditunjukkan oleh rujukan;

Jika data cache adalah batal, baca data daripada ConcurrentHashMap dan simpannya dalam AtomicReference sebagai data asal; data yang sepadan dengan kunci yang ditentukan daripada data yang dicache;
  1. Jika data yang sepadan dengan kunci yang ditentukan tidak wujud, panggil kaedah loadData untuk memuatkan data, simpannya dalam data cache dan kembalikan data .
  2. Apakah faedah menggunakan pemuatan malas yang dicache?
  3. Menggunakan teknologi pemuatan malas cache boleh membawa faedah berikut:
Mengurangkan permulaan dan kemas kini overhed dan penggunaan sumber

Elakkan pengiraan dan permintaan yang tidak berguna;

Tingkatkan kelajuan tindak balas dan daya pemprosesan sistem;
  1. Kurangkan jejak memori dan overhed sistem
  2. Meningkatkan kebolehselenggaraan dan kebolehskalaan sistem.
  3. Ringkasan
  4. Dalam teknologi caching Java, pemuatan malas cache ialah teknologi yang sangat praktikal. Dengan melambatkan permulaan data cache, pengiraan yang tidak perlu dan operasi permintaan boleh dielakkan, meningkatkan prestasi dan kecekapan sistem. Artikel ini memperkenalkan beberapa kaedah pelaksanaan pemuatan malas cache biasa, dengan harapan dapat membantu semua orang memahami dan menguasai teknologi caching Java dengan lebih mendalam.

Atas ialah kandungan terperinci Cache pemuatan malas dalam teknologi caching 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

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

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)

Akar Kuasa Dua di Jawa Akar Kuasa Dua di Jawa Aug 30, 2024 pm 04:26 PM

Panduan untuk Square Root di Java. Di sini kita membincangkan cara Square Root berfungsi di Java dengan contoh dan pelaksanaan kodnya masing-masing.

Nombor Sempurna di Jawa Nombor Sempurna di Jawa Aug 30, 2024 pm 04:28 PM

Panduan Nombor Sempurna di Jawa. Di sini kita membincangkan Definisi, Bagaimana untuk menyemak nombor Perfect dalam Java?, contoh dengan pelaksanaan kod.

Penjana Nombor Rawak di Jawa Penjana Nombor Rawak di Jawa Aug 30, 2024 pm 04:27 PM

Panduan untuk Penjana Nombor Rawak di Jawa. Di sini kita membincangkan Fungsi dalam Java dengan contoh dan dua Penjana berbeza dengan contoh lain.

Nombor Armstrong di Jawa Nombor Armstrong di Jawa Aug 30, 2024 pm 04:26 PM

Panduan untuk Nombor Armstrong di Jawa. Di sini kita membincangkan pengenalan kepada nombor Armstrong di java bersama-sama dengan beberapa kod.

Weka di Jawa Weka di Jawa Aug 30, 2024 pm 04:28 PM

Panduan untuk Weka di Jawa. Di sini kita membincangkan Pengenalan, cara menggunakan weka java, jenis platform, dan kelebihan dengan contoh.

Nombor Smith di Jawa Nombor Smith di Jawa Aug 30, 2024 pm 04:28 PM

Panduan untuk Nombor Smith di Jawa. Di sini kita membincangkan Definisi, Bagaimana untuk menyemak nombor smith di Jawa? contoh dengan pelaksanaan kod.

Soalan Temuduga Java Spring Soalan Temuduga Java Spring Aug 30, 2024 pm 04:29 PM

Dalam artikel ini, kami telah menyimpan Soalan Temuduga Spring Java yang paling banyak ditanya dengan jawapan terperinci mereka. Supaya anda boleh memecahkan temuduga.

Cuti atau kembali dari Java 8 Stream Foreach? Cuti atau kembali dari Java 8 Stream Foreach? Feb 07, 2025 pm 12:09 PM

Java 8 memperkenalkan API Stream, menyediakan cara yang kuat dan ekspresif untuk memproses koleksi data. Walau bagaimanapun, soalan biasa apabila menggunakan aliran adalah: bagaimana untuk memecahkan atau kembali dari operasi foreach? Gelung tradisional membolehkan gangguan awal atau pulangan, tetapi kaedah Foreach Stream tidak menyokong secara langsung kaedah ini. Artikel ini akan menerangkan sebab -sebab dan meneroka kaedah alternatif untuk melaksanakan penamatan pramatang dalam sistem pemprosesan aliran. Bacaan Lanjut: Penambahbaikan API Java Stream Memahami aliran aliran Kaedah Foreach adalah operasi terminal yang melakukan satu operasi pada setiap elemen dalam aliran. Niat reka bentuknya adalah

See all articles