2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Read Through -tila tarkoittaa yleensä välimuististrategiaa, jossa kun sovellus yrittää lukea tietoja, välimuistijärjestelmä tarkistetaan ensin, onko data jo välimuistissa. Jos tiedot ovat välimuistissa (eli välimuistiosuma), tiedot luetaan suoraan välimuistista ja palautetaan sovellukseen. Jos tietoja ei ole välimuistissa (eli välimuisti puuttuu), tiedot luetaan taustalla olevasta tietovarastosta (kuten tietokannasta), ladataan sitten välimuistiin ja palautetaan lopuksi sovellukseen.
Tämän mallin tärkeimpiä etuja ovat:
Read Through -tila erotetaan yleensä strategioista, kuten Lazy Loading ja Eager Loading:
Kun otat Read Through -tilan käyttöön, sinun kannattaa harkita seuraavaa:
Read Through -mallin toteuttaminen Spring Bootissa voidaan yleensä suorittaa Spring Cache -abstraktion avulla. Spring Cache tarjoaa yhtenäisen sovellusliittymän eri välimuistitoteutuksiin ja tukee useita välimuistiratkaisuja, kuten EhCache, Hazelcast, Infinispan, Redis jne.
Lisää riippuvuuksia: Ensin sinun on lisättävä Spring Bootin välimuistiriippuvuudet ja valittu välimuistin toteutuskirjasto (kuten 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>
Ota välimuistimerkinnät käyttöön:Lisää Spring Boot -määritysluokkaan@EnableCaching
annotation ottaaksesi käyttöön välimuistimerkintöjen tuen.
Määritä välimuistin hallinta: Määritä yksi tai useampiCacheManager
, Spring Boot määrittää automaattisesti yksinkertaisenCacheManager
, mutta voit tarvittaessa määrittää monimutkaisempia välimuististrategioita.
- 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
Huomautukset Read Through -tilan toteuttamiseksi. Jos välimuistissa ei ole tietoja, menetelmää kutsutaan ja tulos tallennetaan välimuistiin.- 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);
- }
- }
Välimuistin avain:olla olemassa@Cacheable
Välimuistiavain määritetään huomautuksessa, joka yleensä perustuu metodiparametrin arvoon.
välimuistin nimi: Määritä välimuistin nimi, jota käytetään erottamaan eri välimuistialueet.
Määritä välimuistin parametrit: Voit määrittää välimuistin aikakatkaisun, ehdot, elleivät olosuhteet jne. ole tarpeen
arvo tai cacheNames : Määritä välimuistin nimi. Voit määrittää yhden tai useamman välimuistin nimen, jota käytetään välimuistin tallentamiseen.
@Cacheable(value = "myCacheName", key = "#id")
avain : Määritä välimuistin avainarvojen luontistrategia. SpEL-lausekkeita (Spring Expression Language) käytetään yleensä määrittämään menetelmäparametreja välimuistiavaimina.
@Cacheable(cacheNames = "myCache", key = "#id")
kunto: Määritä välimuistin ehdot ja tallenna välimuistiin vain, kun ehdot täyttyvät.
@Cacheable(cacheNames = "myCache", key = "#id", condition = "#id.length() > 3")
ellei: Määritä ehdot välimuistiin tallentamatta jättämiselle jacondition
Sen sijaan sitä käytetään tiettyjen tilanteiden poissulkemiseen.
@Cacheable(cacheNames = "myCache", key = "#id", unless = "#result == null")
avaingeneraattori: Määritä mukautettu välimuistin avainten luontistrategia Jos tarvitset monimutkaisempaa avainten luontilogiikkaa, voit määrittää aKeyGenerator
Pavun nimi.
@Cacheable(cacheNames = "myCache", keyGenerator = "myKeyGenerator")
välimuistinhallinta: Määritä kumpaa haluat käyttääCacheManager
, jos niitä on useitaCacheManager
kun käytetään.
@Cacheable(cacheNames = "myCache", cacheManager = "myCacheManager")
expireAfterWrite : Aseta vanhenemisaika (millisekunteina) välimuistin kohteen kirjoittamisen jälkeen. Tämä on yleisesti käytetty kokoonpano välimuistissa olevien tietojen käyttöiän määrittämiseen.
@Cacheable(cacheNames = "myCache", key = "#id", expireAfterWrite = 3600000) // 1小时后过期
expireAfterAccess: Aseta vanhenemisaika välimuistikohteen viimeisen käytön jälkeen, mikä koskee sitä, kuinka kauan välimuistissa olevien tietojen vanhentuminen kestää viimeisen käytön jälkeen.
refreshAfterWrite: Aseta, kuinka kauan välimuisti päivitetään kirjoittamisen jälkeen, sopii tilanteisiin, joissa välimuisti päivitetään dynaamisesti.
synkronointi: Määritä, luodaanko välimuistin kohteet synkronisesti kilpailuolosuhteiden estämiseksi samanaikaisissa ympäristöissä.
Poikkeuskäsittely: Varmista, että käsittelet poikkeuksia, jotka voivat esiintyä välimuistimenetelmissä, jotta sovelluksen vakaus ei vaikuta.