le mie informazioni di contatto
Posta[email protected]
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
La modalità Read Through si riferisce generalmente a una strategia di memorizzazione nella cache in cui quando un'applicazione tenta di leggere i dati, il sistema di cache viene prima controllato per verificare se i dati sono già nella cache. Se i dati esistono nella cache (ovvero in caso di cache hit), i dati vengono letti direttamente dalla cache e restituiti all'applicazione. Se i dati non esistono nella cache (ad esempio, un errore nella cache), i dati vengono letti dall'archivio dati sottostante (come un database), quindi caricati nella cache e infine restituiti all'applicazione.
I principali vantaggi di questo modello includono:
La modalità Read Through è solitamente in contrasto con strategie come Lazy Loading e Eager Loading:
Quando implementi la modalità Read Through, potresti prendere in considerazione quanto segue:
L'implementazione del modello Read Through in Spring Boot può in genere essere eseguita tramite l'astrazione Spring Cache. Spring Cache fornisce un'API unificata tra diverse implementazioni di cache e supporta più soluzioni di cache, come EhCache, Hazelcast, Infinispan, Redis, ecc.
Aggiungi dipendenze: innanzitutto devi aggiungere le dipendenze della cache di Spring Boot e la libreria di implementazione della cache selezionata (come Redis)
- <!-- Spring Boot Starter Cache -->
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-cache</artifactId>
- </dependency>
-
- <!-- 以Redis为例,添加Redis的Spring Boot Starter -->
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-data-redis</artifactId>
- </dependency>
Abilita annotazioni cache:Aggiunta alla classe di configurazione Spring Boot@EnableCaching
annotazione per abilitare il supporto delle annotazioni nella cache.
Configura il gestore della cache: Configurarne uno o piùCacheManager
, Spring Boot configurerà automaticamente un sempliceCacheManager
, ma puoi configurare strategie di memorizzazione nella cache più complesse, se necessario.
- import org.springframework.context.annotation.Bean;
- import org.springframework.context.annotation.Configuration;
- import org.springframework.data.redis.cache.RedisCacheConfiguration;
- import org.springframework.data.redis.cache.RedisCacheManager;
- import org.springframework.data.redis.connection.RedisConnectionFactory;
-
- @Configuration
- public class RedisCacheConfig {
-
- @Bean
- public RedisCacheManager cacheManager(RedisConnectionFactory connectionFactory) {
- RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig()
- .serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(RedisSerializer.string()))
- .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(GenericJackson2JsonRedisSerializer.json())))
-
- Map<String, RedisCacheConfiguration> customCacheConfigs = new HashMap<>();
- customCacheConfigs.put("mySpecialCache",
- config.entryTtl(Duration.ofMinutes(15))); // 为特定缓存设置不同的过期时间
-
- .disableCachingNullValues();
- return RedisCacheManager.builder(connectionFactory)
- .cacheDefaults(config)
- // 在这里可以自定义添加缓存配置
- .withInitialCacheConfigurations(customCacheConfigs)
- .build();
- }
- }
@Cacheable
Annotazioni per implementare la modalità Read Through. Se non sono presenti dati nella cache, verrà chiamato il metodo e il risultato verrà memorizzato nella cache.- import org.springframework.cache.annotation.Cacheable;
- import org.springframework.stereotype.Service;
-
- @Service
- public class MyService {
-
- @Cacheable(value = "myCache", key = "#id")
- public MyData getDataById(String id) {
- // 从数据库加载数据
- return myDataRepository.findById(id);
- }
- }
Chiave della cache:esistere@Cacheable
La chiave della cache è specificata nell'annotazione, che in genere si basa sul valore del parametro del metodo.
nome della cache: specificare il nome della cache, che verrà utilizzato per distinguere i diversi domini della cache.
Configura i parametri della cache: è possibile configurare il timeout della cache, le condizioni, le condizioni di meno, ecc. in base alle necessità
valore o cacheNames :Specifica il nome della cache. È possibile specificare uno o più nomi di cache che verranno utilizzati per archiviare la cache.
@Cacheable(value = "myCacheName", key = "#id")
chiave : definisce la strategia di generazione dei valori delle chiavi della cache. Le espressioni SpEL (Spring Expression Language) vengono solitamente utilizzate per specificare i parametri del metodo come chiavi di cache.
@Cacheable(cacheNames = "myCache", key = "#id")
condizione: definisce le condizioni per la memorizzazione nella cache e memorizza nella cache solo quando le condizioni sono soddisfatte.
@Cacheable(cacheNames = "myCache", key = "#id", condition = "#id.length() > 3")
salvo che: Definire le condizioni per non memorizzare nella cache econdition
Viene invece utilizzato per escludere determinate situazioni.
@Cacheable(cacheNames = "myCache", key = "#id", unless = "#result == null")
generatore di chiavi: Specificare una strategia di generazione della chiave cache personalizzata Se è necessaria una logica di generazione della chiave più complessa, è possibile specificare aKeyGenerator
Nome del fagiolo.
@Cacheable(cacheNames = "myCache", keyGenerator = "myKeyGenerator")
gestore della cache:Specificare quale utilizzareCacheManager
, se ce ne sono piùCacheManager
quando utilizzato.
@Cacheable(cacheNames = "myCache", cacheManager = "myCacheManager")
scadereDopoScrittura : imposta il tempo di scadenza (in millisecondi) dopo la scrittura dell'elemento nella cache. Questa è una configurazione comunemente utilizzata per definire la durata dei dati memorizzati nella cache.
@Cacheable(cacheNames = "myCache", key = "#id", expireAfterWrite = 3600000) // 1小时后过期
scadenzaDopoAccesso: imposta la scadenza dopo l'ultimo accesso all'elemento della cache, che è applicabile al tempo trascorso dall'ultimo accesso ai dati della cache.
AggiornaDopoScrittura: imposta per quanto tempo aggiornare la cache dopo la scrittura, adatto per scenari in cui la cache viene aggiornata dinamicamente.
sincronizzare: imposta se creare elementi della cache in modo sincrono per prevenire condizioni di competizione in ambienti simultanei.
La gestione delle eccezioni: assicurati di gestire le eccezioni che potrebbero essere generate nei metodi della cache per evitare di compromettere la stabilità dell'applicazione.