моя контактная информация
Почтамезофия@protonmail.com
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Режим сквозного чтения обычно относится к стратегии кэширования, при которой, когда приложение пытается прочитать данные, сначала проверяется система кэширования, чтобы определить, присутствуют ли данные уже в кэше. Если данные существуют в кеше (т. е. попадание в кеш), данные считываются непосредственно из кеша и возвращаются в приложение. Если данные не существуют в кеше (т. е. промах в кеше), данные считываются из базового хранилища данных (например, базы данных), затем загружаются в кеш и, наконец, возвращаются в приложение.
К основным преимуществам данной модели относятся:
Режим чтения обычно противопоставляется таким стратегиям, как отложенная загрузка и быстрая загрузка:
При реализации режима чтения вы можете принять во внимание следующее:
Реализация шаблона Read Through в Spring Boot обычно может быть выполнена с помощью абстракции Spring Cache. Spring Cache предоставляет унифицированный API для различных реализаций кэша и поддерживает несколько решений кэширования, таких как EhCache, Hazelcast, Infinispan, Redis и т. д.
Добавьте зависимости: во-первых, вам нужно добавить зависимости кеша Spring Boot и выбранную библиотеку реализации кеша (например, 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>
Включить аннотации кеширования:Добавьте класс конфигурации Spring Boot.@EnableCaching
annotation, чтобы включить поддержку аннотаций кэша.
Настроить диспетчер кэша: настроить один или несколькоCacheManager
, Spring Boot автоматически настроит простойCacheManager
, но при необходимости вы можете настроить более сложные стратегии кэширования.
- 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
Аннотации для реализации режима чтения. Если в кеше нет данных, будет вызван метод и результат будет закеширован.- 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);
- }
- }
Ключ кэша:существовать@Cacheable
Ключ кэша указывается в аннотации, которая обычно основана на значении параметра метода.
имя кэша: укажите имя кэша, которое будет использоваться для различения разных доменов кэша.
Настроить параметры кэша: Вы можете настроить тайм-аут кэша, условия, кроме условий и т. д. по мере необходимости.
значение или имя кэша :Укажите имя кэша. Вы можете указать одно или несколько имен кэша, которые будут использоваться для хранения кэша.
@Cacheable(value = "myCacheName", key = "#id")
ключ : Определите стратегию генерации значений ключей кэша. Выражения SpEL (язык выражений Spring) обычно используются для указания параметров метода в качестве ключей кэша.
@Cacheable(cacheNames = "myCache", key = "#id")
состояние: Определите условия кэширования и кэшируйте только при выполнении условий.
@Cacheable(cacheNames = "myCache", key = "#id", condition = "#id.length() > 3")
пока не: Определите условия отсутствия кэширования иcondition
Вместо этого он используется для исключения определенных ситуаций.
@Cacheable(cacheNames = "myCache", key = "#id", unless = "#result == null")
Генератор ключей: укажите собственную стратегию генерации ключей кэша. Если вам нужна более сложная логика генерации ключей, вы можете указать ее.KeyGenerator
Имя фасоли.
@Cacheable(cacheNames = "myCache", keyGenerator = "myKeyGenerator")
кэшменеджер:Укажите, какой из них использоватьCacheManager
, если их несколькоCacheManager
при использовании.
@Cacheable(cacheNames = "myCache", cacheManager = "myCacheManager")
истекаетAfterWrite : установите время истечения срока действия (в миллисекундах) после записи элемента кэша. Это часто используемая конфигурация для определения срока жизни кэшированных данных.
@Cacheable(cacheNames = "myCache", key = "#id", expireAfterWrite = 3600000) // 1小时后过期
expireAfterAccess: установите время истечения срока действия после последнего доступа к элементу кэша, которое соответствует тому, как долго после последнего доступа к данным кэша.
обновитьAfterWrite: установите продолжительность обновления кэша после записи, что подходит для сценариев, в которых кэш обновляется динамически.
синхронизировать: укажите, создавать ли элементы кэша синхронно, чтобы предотвратить условия гонки в параллельных средах.
Обработка исключений: обязательно обрабатывайте исключения, которые могут быть выброшены в методах кэша, чтобы не влиять на стабильность приложения.