2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Read Through मोड् सामान्यतया एकं संग्रहणरणनीतिं निर्दिशति यस्मिन् यदा कश्चन अनुप्रयोगः दत्तांशं पठितुं प्रयतते तदा प्रथमं संग्रहणप्रणालीं परीक्षिता भवति यत् दत्तांशः पूर्वमेव संग्रहणे उपस्थितः अस्ति वा इति यदि दत्तांशः संग्रहे विद्यते (अर्थात् cache hit), तर्हि दत्तांशः प्रत्यक्षतया cache तः पठ्यते, अनुप्रयोगे च प्रत्यागच्छति । यदि दत्तांशः सञ्चये नास्ति (अर्थात्, सञ्चयस्य चूकः), तर्हि दत्तांशः अन्तर्निहितदत्तांशसञ्चयात् (यथा दत्तांशकोशः) पठ्यते, ततः संग्रहे लोड् भवति, अन्ते च अनुप्रयोगे प्रत्यागच्छति
अस्य प्रतिरूपस्य मुख्यलाभाः सन्ति- १.
Read Through मोड् सामान्यतया Lazy Loading तथा Eager Loading इत्यादिभिः रणनीतिभिः सह विपरीतः भवति:
Read Through mode इत्यस्य कार्यान्वयनकाले भवान् निम्नलिखितविषये विचारं कर्तुम् इच्छति ।
Spring Boot इत्यस्मिन् Read Through pattern इत्यस्य कार्यान्वयनम् सामान्यतया Spring Cache abstraction इत्यस्य माध्यमेन कर्तुं शक्यते । Spring Cache विभिन्नेषु cache कार्यान्वयनेषु एकीकृतं API प्रदाति तथा च बहुविधं cache समाधानं समर्थयति, यथा EhCache, Hazelcast, Infinispan, Redis इत्यादयः ।
निर्भरतां योजयतु: प्रथमं, भवद्भिः Spring Boot इत्यस्य cache dependencies तथा च चयनितं cache implementation library (यथा 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
cache एनोटेशन समर्थनं सक्षमं कर्तुं 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
Read Through मोड् कार्यान्वितुं एनोटेशन्स् । यदि सञ्चये दत्तांशः नास्ति तर्हि विधिः आह्वयते, परिणामः च संग्रहीतः भविष्यति ।- 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
एनोटेशनमध्ये cache कीलं निर्दिष्टं भवति, यत् प्रायः मेथड् पैरामीटर् इत्यस्य मूल्यस्य आधारेण भवति ।
सञ्चयनाम: कैश-नाम निर्दिशन्तु, यस्य उपयोगः भिन्न-भिन्न-सञ्चय-क्षेत्राणां भेदाय भविष्यति ।
कैश पैरामीटर्स् विन्यस्यताम्: भवान् आवश्यकतानुसारं cache timeout, conditions, यावत् कण्डिशन् इत्यादीन् विन्यस्तुं शक्नोति
मूल्यं वा cacheNames इति :सञ्चयनाम निर्दिशतु। भवान् एकं वा अधिकं वा cache नाम निर्दिष्टुं शक्नोति यत् cache संग्रहणार्थं उपयुज्यते ।
@Cacheable(value = "myCacheName", key = "#id")
कुंजी : cache key values कृते generation strategy परिभाषयन्तु। SpEL अभिव्यक्तिः (Spring Expression Language) प्रायः मेथड् पैरामीटर्स् कैश कीलरूपेण निर्दिष्टुं उपयुज्यते ।
@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
, यदि बहुविधाः सन्तिCacheManager
प्रयुक्ते सति ।
@Cacheable(cacheNames = "myCache", cacheManager = "myCacheManager")
expireAfterWrite इति : कैश-वस्तु लिखित्वा समाप्तिसमयं (मिलिसेकेण्ड्-मध्ये) सेट् कुर्वन्तु । एतत् सामान्यतया प्रयुक्तं विन्यासः अस्ति यत् संग्रहीतदत्तांशस्य आयुः परिभाषितुं शक्यते ।
@Cacheable(cacheNames = "myCache", key = "#id", expireAfterWrite = 3600000) // 1小时后过期
expireAfterAccess इति: कैश-वस्तूनाम् अन्तिम-प्रवेशस्य अनन्तरं समाप्ति-समयं सेट् कुर्वन्तु, यत् कैश-दत्तांशस्य अन्तिम-प्रवेशस्य कियत्कालं यावत् उपयुक्तम् अस्ति ।
refreshAfterWrite इति: लेखनस्य अनन्तरं कियत्कालं यावत् संग्रहणं ताजगीं कर्तव्यम् इति सेट् कुर्वन्तु, यत्र सञ्चिका गतिशीलरूपेण ताजगीकृतः भवति तत्र परिदृश्यानां कृते उपयुक्तम् ।
समन्वयनम्: समवर्तीवातावरणेषु जातिस्थितिः निवारयितुं समकालिकरूपेण संग्रहणवस्तूनि निर्मातव्यानि वा इति सेट् कुर्वन्तु ।
अपवादनियन्त्रणम्: अनुप्रयोगस्य स्थिरतां प्रभावितं न कर्तुं कैश-विधिषु क्षिप्ताः अपवादाः नियन्त्रयितुं सुनिश्चितं कुर्वन्तु ।