springboot 캐 시 의 GuavaCacheManager

11251 단어 2.5springboot캐 시
나의 springboot 캐 시 기술 블 로 그 는 springboot 의 캐 시 기술 을 주로 성명 식 캐 시 로 주 해 를 썼 다.내 가 이 블 로 그 를 쓰 는 것 은 캐 시 를 주석 하지 않 고 사용 하 는 방법 을 말 하 는 것 이다.
참고 로 GuavaCacheManager 의 데이터 구 조 를 살 펴 보면 GuavaCacheManager 는 일종 의 Map> 데이터 구조 와 유사 하 다. GuavaCacheManager 에는 여러 개의 cache 가 있 고 모든 cache 는 Map 과 유사 한 구조 로 유일한 key 와 value 가 있다.
본 논문 의 사례 는 프로젝트 가 시 작 될 때 Person 표 의 데 이 터 를 모두 GuavaCacheManager 에 저장 하고 데 이 터 를 조회 할 때 GuavaCacheManager 에서 가 져 오 며 GuavaCacheManager 에 없 으 면 데이터 베이스 에서 가 져 오 는 것 이다.
자, 쓸데없는 말 은 그만 하고 주요 코드 가 실현 되 는 것 을 보 세 요.
1. 의존 도 추가
   <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-cacheartifactId>
        dependency>
         
        <dependency>
            <groupId>com.google.guavagroupId>
            <artifactId>guavaartifactId>
            <version>18.0version>
        dependency>

2. CacheConfig 추가
새 CacheConfig. java
서비스 시작 후 person 표 의 데 이 터 를 GuavaCacheManager 에 불 러 옵 니 다.
package com.us.example.config;

import com.us.example.bean.Person;
import com.us.example.service.DemoService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.Cache;
import org.springframework.cache.CacheManager;
import org.springframework.cache.guava.GuavaCacheManager;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.util.ArrayList;
import java.util.List;

/**
 * Created by yangyibo on 17/3/2.
 */
@Configuration
public class CacheConfig {

    @Autowired
    private DemoService demoService;

    @Bean
    public CacheManager getCacheManager() {
        List personList = demoService.findAll();
        //       
        List cacheNames = new ArrayList();
        GuavaCacheManager cacheManager = new GuavaCacheManager();

              //    50030   
                          cacheManager.setCacheSpecification("maximumSize=500,expireAfterWrite=30m");
        //GuavaCacheManager          Map>  map =new HashMap<>();

        //       
        personList.stream().forEach(person -> {
            // person  id cacheName
            String cacheName=person.getId().toString();
            if(cacheManager.getCache(cacheName)==null){
                //    person      ,          
                cacheNames.add(cacheName);
                cacheManager.setCacheNames(cacheNames);
            }
            Cache cache = cacheManager.getCache(cacheName);
            //     person id     key  person      value
            cache.put(person.getId(),person);
            System.out.println("  ID  "+cacheName+ " person       ");
        });
        return cacheManager;
    }
}

3. service
그리고 조회 할 때 캐 시 를 먼저 조회 하고 캐 시가 없 으 면 데이터 베 이 스 를 조회 합 니 다.
package com.us.example.service;

import com.us.example.bean.Person;
import com.us.example.dao.PersonRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.Cache;
import org.springframework.cache.CacheManager;
import org.springframework.stereotype.Service;
/**
 * Created by yangyibo on 17/3/2.
 */
@Service
public class PersonService {
    @Autowired
    CacheManager cacheManager;

    @Autowired
    private PersonRepository personRepository;


    public Person findOne(Long id) {
        Person person = getCache(id, cacheManager);
        if (person != null) {
            System.out.println("      :" + person.toString());
        } else {
            person = personRepository.findOne(id);
            System.out.println("       :" + person.toString());

        }
        return person;
    }

    public Person save(Person person) {
        Person p = personRepository.save(person);
        return p;
    }


    public Person getCache(Long id, CacheManager cacheManager) {

//   Person person=(Person) cacheManager.getCache(id.toString()).get(id).get();

        Cache cache = cacheManager.getCache(id.toString());
        Cache.ValueWrapper valueWrapper = cache.get(id);
        Person person = (Person) valueWrapper.get();
        return person;
    }
}
  :    Person       findAll()             findOne       service 。

      service     springboot        bean     ,    :
Injection of autowired dependencies failed

원본 코드:https://github.com/527515025/springBoot

좋은 웹페이지 즐겨찾기