Jadual Kandungan
Strategi Caching Cekap: Caching Hibrid dalam Aplikasi But Spring
Langkah 1: Tambahkan kebergantungan
Pertama, tambahkan kebergantungan yang diperlukan pada fail
Berikut ialah konfigurasi cache:
1. Pengurus Cache (Pengurus Cache)
Aliran Kerja Caching Hibrid
Entri cache ditambahkan
Pemerolehan kemasukan cache
Pengusiran Kemasukan Cache
Ringkasan
Rumah Java javaTutorial Strategi Cache Hibrid di Spring Boot: Panduan untuk Redisson dan Integrasi Kafein

Strategi Cache Hibrid di Spring Boot: Panduan untuk Redisson dan Integrasi Kafein

Jan 26, 2025 am 04:04 AM

Strategi Caching Cekap: Caching Hibrid dalam Aplikasi But Spring

Dalam pembangunan aplikasi moden, prestasi dan kebolehskalaan adalah faktor utama yang menentukan kejayaan atau kegagalan sistem. Caching memainkan peranan penting dalam menambah baik ini dengan mengurangkan beban pangkalan data, mengurangkan kependaman dan memastikan pengalaman pengguna yang lancar. Walau bagaimanapun, tiada penyelesaian caching tunggal yang sesuai untuk semua senario.

Cache tempatan (seperti Kafein) memberikan kelajuan yang sangat pantas kerana ia dijalankan dalam memori dan berdekatan dengan aplikasi. Ia bagus untuk mengurangkan masa tindak balas untuk data yang kerap diakses. Cache yang diedarkan (seperti Redisson's Redisson), sebaliknya, memberikan kebolehskalaan dan ketekalan merentas berbilang contoh aplikasi. Caching teragih memastikan semua nod dalam sistem teragih mempunyai akses kepada data terkini yang sama, yang penting dalam persekitaran berbilang nod. Walau bagaimanapun, bergantung semata-mata pada caching tempatan atau diedarkan boleh membawa cabaran:

    Cache setempat
  • boleh menjadi tidak konsisten dalam persekitaran yang diedarkan kerana kemas kini data tidak disegerakkan antara nod.
  • Cache teragih
  • akan memperkenalkan sedikit kependaman rangkaian, yang mungkin tidak sesuai untuk senario kependaman ultra rendah.
  • Di sinilah
Caching Hibrid

menjadi penyelesaian yang berkesan. Dengan menggabungkan kelebihan caching tempatan dan pengedaran menggunakan Kafein dan Redisson, anda mendapat prestasi tinggi kelajuan caching tempatan sambil mengekalkan konsistensi dan kebolehskalaan dengan jantina caching yang diedarkan. Artikel ini meneroka cara melaksanakan caching hibrid dalam aplikasi Spring Boot untuk memastikan prestasi optimum dan konsistensi data.

Hybrid Cache Strategy in Spring Boot: A Guide to Redisson and Caffeine IntegrationLangkah-langkah pelaksanaan

Langkah 1: Tambahkan kebergantungan

Pertama, tambahkan kebergantungan yang diperlukan pada fail

anda:

pom.xml

Langkah 2: Konfigurasikan cache
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-cache</artifactId>
</dependency>
<dependency>
    <groupId>com.github.ben-manes.caffeine</groupId>
    <artifactId>caffeine</artifactId>
    <version>3.2.0</version>
</dependency>
<dependency>
    <groupId>org.redisson</groupId>
    <artifactId>redisson</artifactId>
    <version>3.43.0</version>
</dependency>
Salin selepas log masuk
Salin selepas log masuk

Berikut ialah konfigurasi cache:

Penjelasan terperinci tentang komponen utama
@Configuration
@EnableCaching
public class CacheConfig implements CachingConfigurer {

    @Value("${cache.server.address}")
    private String cacheAddress;

    @Value("${cache.server.password}")
    private String cachePassword;

    @Value("${cache.server.expirationTime:60}")
    private Long cacheExpirationTime;

    @Bean(destroyMethod = "shutdown")
    RedissonClient redisson() {
        Config config = new Config();
        config.useSingleServer().setAddress(cacheAddress).setPassword(cachePassword.trim());
        config.setLazyInitialization(true);
        return Redisson.create(config);
    }

    @Bean
    @Override
    public CacheManager cacheManager() {
        CaffeineCacheManager cacheManager = new CaffeineCacheManager();
        cacheManager.setCaffeine(Caffeine.newBuilder().expireAfterWrite(cacheExpirationTime, TimeUnit.MINUTES));
        return cacheManager;
    }

    @Bean
    public CacheEntryRemovedListener cacheEntryRemovedListener() {
        return new CacheEntryRemovedListener(cacheManager());
    }

    @Bean
    @Override
    public CacheResolver cacheResolver() {
        return new LocalCacheResolver(cacheManager(), redisson(), cacheEntryRemovedListener());
    }
}
Salin selepas log masuk
Salin selepas log masuk

1. Pengurus Cache (Pengurus Cache)

bertanggungjawab mengurus kitaran hayat cache dan menyediakan akses kepada pelaksanaan cache yang sesuai (cth. setempat atau diedarkan). Dalam contoh ini, kami menggunakan

untuk mendayakan caching dalam memori dan mengkonfigurasi dasar tamat tempoh melalui CacheManager. CaffeineCacheManager Caffeine2. Penyelesai Cache

Secara dinamik tentukan cache yang hendak digunakan untuk operasi tertentu. Di sini,

menghubungkan cache tempatan (Kafein) dan diedarkan (Redisson) untuk memastikan strategi hibrid digunakan dengan berkesan. CacheResolver LocalCacheResolver

@Component
public class LocalCacheResolver implements CacheResolver {
    // ... (代码与原文相同) ...
}
Salin selepas log masuk
Salin selepas log masuk
3. Entri Cache Dialih Keluar Pendengar (CacheEntryRemovedListener)
public class LocalCache implements Cache {
    // ... (代码与原文相同) ...
}
Salin selepas log masuk
Salin selepas log masuk

Mendengar entri yang dialih keluar daripada cache yang diedarkan (Redis) dan memastikan bahawa ia juga dialih keluar daripada cache setempat setiap nod, dengan itu mengekalkan konsistensi.

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-cache</artifactId>
</dependency>
<dependency>
    <groupId>com.github.ben-manes.caffeine</groupId>
    <artifactId>caffeine</artifactId>
    <version>3.2.0</version>
</dependency>
<dependency>
    <groupId>org.redisson</groupId>
    <artifactId>redisson</artifactId>
    <version>3.43.0</version>
</dependency>
Salin selepas log masuk
Salin selepas log masuk

Aliran Kerja Caching Hibrid

Entri cache ditambahkan

Apabila kaedah beranotasi dengan @Cacheable dilaksanakan, kaedah put akan dipanggil. Ini menyimpan data dalam cache setempat (Kafein) dan cache teragih (Redis):

@Configuration
@EnableCaching
public class CacheConfig implements CachingConfigurer {

    @Value("${cache.server.address}")
    private String cacheAddress;

    @Value("${cache.server.password}")
    private String cachePassword;

    @Value("${cache.server.expirationTime:60}")
    private Long cacheExpirationTime;

    @Bean(destroyMethod = "shutdown")
    RedissonClient redisson() {
        Config config = new Config();
        config.useSingleServer().setAddress(cacheAddress).setPassword(cachePassword.trim());
        config.setLazyInitialization(true);
        return Redisson.create(config);
    }

    @Bean
    @Override
    public CacheManager cacheManager() {
        CaffeineCacheManager cacheManager = new CaffeineCacheManager();
        cacheManager.setCaffeine(Caffeine.newBuilder().expireAfterWrite(cacheExpirationTime, TimeUnit.MINUTES));
        return cacheManager;
    }

    @Bean
    public CacheEntryRemovedListener cacheEntryRemovedListener() {
        return new CacheEntryRemovedListener(cacheManager());
    }

    @Bean
    @Override
    public CacheResolver cacheResolver() {
        return new LocalCacheResolver(cacheManager(), redisson(), cacheEntryRemovedListener());
    }
}
Salin selepas log masuk
Salin selepas log masuk

Pemerolehan kemasukan cache

Untuk mendapatkan semula data, sistem mula-mula menyemak sama ada kunci wujud dalam cache setempat. Jika kunci tidak ditemui, cache yang diedarkan akan ditanya. Jika nilai wujud dalam cache yang diedarkan, ia akan ditambahkan pada cache setempat untuk akses seterusnya yang lebih pantas:

@Component
public class LocalCacheResolver implements CacheResolver {
    // ... (代码与原文相同) ...
}
Salin selepas log masuk
Salin selepas log masuk

Pengusiran Kemasukan Cache

Apabila pengusiran cache berlaku (contohnya, melalui anotasi @CacheEvict), kunci akan dialih keluar daripada cache yang diedarkan. Cache setempat nod lain akan dimaklumkan melalui CacheEntryRemovedListener untuk mengalih keluar kunci yang sama:

public class LocalCache implements Cache {
    // ... (代码与原文相同) ...
}
Salin selepas log masuk
Salin selepas log masuk

Ringkasan

Cache hibrid menggabungkan kelajuan cache memori tempatan dengan kebolehskalaan dan ketekalan cache yang diedarkan. Pendekatan ini menangani had penggunaan hanya cache tempatan atau diedarkan. Dengan menyepadukan Kafein dan Redisson dalam aplikasi Spring Boot anda, anda boleh mencapai peningkatan prestasi yang ketara sambil memastikan ketekalan data antara nod aplikasi.

Menggunakan CacheEntryRemovedListener dan CacheResolver memastikan bahawa entri cache disimpan dalam penyegerakan merentas semua peringkat caching, menyediakan strategi caching yang cekap dan boleh dipercayai untuk aplikasi berskala moden. Pendekatan hibrid ini amat berharga dalam sistem teragih, di mana kedua-dua prestasi dan konsistensi adalah kritikal.

Atas ialah kandungan terperinci Strategi Cache Hibrid di Spring Boot: Panduan untuk Redisson dan Integrasi Kafein. 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)

Adakah perisian keselamatan syarikat menyebabkan aplikasi gagal dijalankan? Bagaimana cara menyelesaikan masalah dan menyelesaikannya? Adakah perisian keselamatan syarikat menyebabkan aplikasi gagal dijalankan? Bagaimana cara menyelesaikan masalah dan menyelesaikannya? Apr 19, 2025 pm 04:51 PM

Penyelesaian masalah dan penyelesaian kepada perisian keselamatan syarikat yang menyebabkan beberapa aplikasi tidak berfungsi dengan baik. Banyak syarikat akan menggunakan perisian keselamatan untuk memastikan keselamatan rangkaian dalaman. …

Bagaimana untuk memudahkan isu pemetaan medan dalam dok sistem menggunakan mapstruct? Bagaimana untuk memudahkan isu pemetaan medan dalam dok sistem menggunakan mapstruct? Apr 19, 2025 pm 06:21 PM

Pemprosesan pemetaan medan dalam dok sistem sering menemui masalah yang sukar ketika melaksanakan sistem dok: bagaimana untuk memetakan medan antara muka sistem dengan berkesan ...

Bagaimana dengan elegan mendapatkan nama pemboleh ubah kelas entiti untuk membina keadaan pertanyaan pangkalan data? Bagaimana dengan elegan mendapatkan nama pemboleh ubah kelas entiti untuk membina keadaan pertanyaan pangkalan data? Apr 19, 2025 pm 11:42 PM

Apabila menggunakan Mybatis-Plus atau Rangka Kerja ORM yang lain untuk operasi pangkalan data, sering diperlukan untuk membina syarat pertanyaan berdasarkan nama atribut kelas entiti. Sekiranya anda secara manual setiap kali ...

Bagaimanakah saya menukar nama kepada nombor untuk melaksanakan penyortiran dan mengekalkan konsistensi dalam kumpulan? Bagaimanakah saya menukar nama kepada nombor untuk melaksanakan penyortiran dan mengekalkan konsistensi dalam kumpulan? Apr 19, 2025 pm 11:30 PM

Penyelesaian untuk menukar nama kepada nombor untuk melaksanakan penyortiran dalam banyak senario aplikasi, pengguna mungkin perlu menyusun kumpulan, terutama dalam satu ...

Bagaimanakah Idea IntelliJ mengenal pasti nombor port projek boot musim bunga tanpa mengeluarkan log? Bagaimanakah Idea IntelliJ mengenal pasti nombor port projek boot musim bunga tanpa mengeluarkan log? Apr 19, 2025 pm 11:45 PM

Mula musim bunga menggunakan versi IntelliJideaultimate ...

Bagaimana cara menukar objek Java dengan selamat ke array? Bagaimana cara menukar objek Java dengan selamat ke array? Apr 19, 2025 pm 11:33 PM

Penukaran objek dan tatasusunan Java: Perbincangan mendalam tentang risiko dan kaedah penukaran jenis cast yang betul Banyak pemula Java akan menemui penukaran objek ke dalam array ...

Bagaimana dengan elegan mendapatkan syarat pertanyaan bangunan pembolehubah kelas entiti apabila menggunakan tkmybatis untuk pertanyaan pangkalan data? Bagaimana dengan elegan mendapatkan syarat pertanyaan bangunan pembolehubah kelas entiti apabila menggunakan tkmybatis untuk pertanyaan pangkalan data? Apr 19, 2025 pm 09:51 PM

Apabila menggunakan tkmybatis untuk pertanyaan pangkalan data, bagaimana dengan anggun mendapatkan nama pembolehubah kelas entiti untuk membina keadaan pertanyaan adalah masalah biasa. Artikel ini akan ...

Platform e-dagang SKU dan Reka Bentuk Pangkalan Data SPU: Bagaimana untuk mengambil kira kedua-dua atribut yang ditakrifkan oleh pengguna dan produk yang tidak berkesudahan? Platform e-dagang SKU dan Reka Bentuk Pangkalan Data SPU: Bagaimana untuk mengambil kira kedua-dua atribut yang ditakrifkan oleh pengguna dan produk yang tidak berkesudahan? Apr 19, 2025 pm 11:27 PM

Penjelasan terperinci mengenai reka bentuk jadual SKU dan SPU di platform e-dagang Artikel ini akan membincangkan isu reka bentuk pangkalan data SKU dan SPU dalam platform e-dagang, terutamanya bagaimana menangani jualan yang ditentukan pengguna ...

See all articles