Springboot intègre le cache local de Caffeine


Dans le projet, certaines données sont souvent moins lues et écrites. Nous les mettons généralement dans le cache redis, mais parfois cela semble excessif. Nous stockerons une partie des données dans le cache local. Comme nous l'avons mentionné précédemment, le cache de goyave est l'un des La caféine a remplacé Guava dans Spring Boot 2.0, et le support de goyave n'est plus fourni. En parlant de support de printemps, il est principalement pratique d'utiliser @Cacheable, @CachePut, @CacheEvict, @Caching et d'autres annotations

Il existe deux façons principales de configurer le cache, je recommande personnellement la deuxième méthode, qui est plus flexible

Une configuration de base

application.properties

spring.cache.type:caffeine
spring.cache.caffeine.spec=initialCapacity=10,maximumSize=200,expireAfterWrite=60s

un service

@Service
public class StudentService {
    
    

    @Cacheable(value = "data")
    public String getData(String string){
    
    
        System.out.println(String.format("进入servie查询方法 参数:%s", string));
        return string;
    }

    @CacheEvict(value = "data")
    public String deleteData(String string){
    
    
        System.out.println(String.format("进入servie删除方法 参数:%s", string));
        return string;
    }
}

Classe d'essai

@RunWith(SpringRunner.class)
@SpringBootTest(classes = DemoApplication.class)
public class AppTest {
    
    

    @Autowired
    public StudentService studentService;

    @Test
    public void test1() throws InterruptedException {
    
    
        for (int i = 0; i < 10; i++) {
    
    
            TimeUnit.SECONDS.sleep(1);
            String data = studentService.getData(String.valueOf(1));
            System.out.println("controller studentService:"+data);
        }

        System.out.println("---------------------------------------------------");
        String data = studentService.getData(String.valueOf(1));
        System.out.println("删除缓存");
        String deleteData = studentService.deleteData(String.valueOf(1));
        System.out.println("删除后再次查询缓存");
        String data1 = studentService.getData(String.valueOf(1));
        System.out.println("controller studentService:"+data);
    }
}

résultat

进入servie查询方法 参数:1
controller studentService:1
controller studentService:1
controller studentService:1
controller studentService:1
controller studentService:1
controller studentService:1
controller studentService:1
controller studentService:1
controller studentService:1
controller studentService:1
---------------------------------------------------
删除缓存
进入servie删除方法 参数:1
删除后再次查询缓存
进入servie查询方法 参数:1
controller studentService:1

On peut voir que la méthode de requête getData ne demandera que deux fois, et le reste sera mis en cache, et la suppression sera également interrogée et stockée dans le cache.

Deux classes de configuration

@Configuration
public class CacheConfig {
    
    

    @Bean
    public CacheManager caffeineCacheManager() {
    
    
        CaffeineCacheManager cacheManager = new CaffeineCacheManager();
        cacheManager.setCaffeine(Caffeine.newBuilder()
                .maximumSize(2)
                .expireAfterAccess(5, TimeUnit.SECONDS));
        return cacheManager;
    }
}

couche de service

@CacheConfig
public class StudentService {
    
    

    @Cacheable(value = "data")
    public String getData(String string){
    
    
        System.out.println(String.format("进入servie查询方法 参数:%s", string));
        return string;
    }

    @CacheEvict(value = "data")
    public String deleteData(String string){
    
    
        System.out.println(String.format("进入servie删除方法 参数:%s", string));
        return string;
    }
}

Les informations de configuration détaillées sont les mêmes que la configuration de goyave, veuillez vous référer au cache de goyave devant l'argent.
Même résultat que ci-dessus

Je suppose que tu aimes

Origine blog.csdn.net/qq_37904966/article/details/108182412
conseillé
Classement