NCache 스프링 데이터 캐시로

NCache 이 라이브러리는 Spring Framework와 통합되어 데이터베이스 병목 현상을 제거하는 분산형 인메모리 키-값 저장소입니다. 고성능 Spring Cache Provider 역할을 하며, 트랜잭션이 많은 Java 애플리케이션에 선형적인 확장성을 제공합니다.

Spring은 Java용 경량 종속성 주입 및 측면 지향 개발 컨테이너 및 프레임워크입니다. 이를 통해 애플리케이션 개발을 단순화하고 다음과 같은 재사용 가능한 부분을 애플리케이션에 연결할 수 있습니다. NCache.

일반적인 사용 사례 NCache 봄 데이터에서

  • 데이터베이스 확장: Spring Data 리포지토리를 메모리에 캐싱하여 지연 시간이 긴 병목 현상을 제거하세요.
  • 세션 관리: 클러스터링된 웹 환경에서 세션 유지 문제를 해결합니다.
  • 표준화: 벤더에 구애받지 않는 Spring 애플리케이션을 위해 JCache(JSR-107) 표준을 준수하는 캐싱을 구현합니다.
  • 고가용성: 자가 복구 기능과 선형 확장성을 갖춘 분산 캐시를 통해 100% 가동 시간을 보장하세요.
 

왜? NCache Spring 애플리케이션에 가장 적합한 분산 캐시는 무엇일까요?

Spring 자체는 응집력과 느슨한 결합을 제공하여 Java 개발의 전반적인 복잡성을 줄이지만 이러한 애플리케이션에서 높은 트래픽을 생성합니다. 이러한 트래픽이 많은 Spring 애플리케이션은 심각한 확장성 문제에 직면해 있습니다. 따라서 확장성 요구 사항을 충족하는 인메모리 분산 캐시가 중요합니다.

이러한 애플리케이션은 서버 팜에 더 많은 서버를 추가하여 확장할 수 있지만 안타깝게도 데이터베이스는 이렇게 높은 로드를 처리할 만큼 확장할 수 없습니다. 이러한 시나리오에서는 분산 캐시가 데이터베이스 처리에 가장 적합합니다. 확장 성 문제가 발생했습니다.

따라서 최선의 선택은 NCache. 이는 속도가 빠르고 메모리 내에서 키-값 저장소 Spring 캐싱 모듈을 구현하여 Spring 애플리케이션을 확장 가능하고 분산되게 만드는 분산 캐시입니다. 확장성 문제를 일으키는 값비싼 데이터베이스 이동을 줄여 데이터베이스의 부담을 덜어주고 더 빠른 성능을 제공합니다.

 

사용할 Spring 애플리케이션을 구성하는 방법 NCache

Spring 애플리케이션을 구성하려면 NCache개발자는 네이티브 Spring 캐싱 공급자 또는 JCache 호환 공급자 중에서 선택할 수 있습니다.

  • 통해 스프링 캐싱 공급자, NCache Spring 애플리케이션의 캐시 관리자 역할을 합니다.
  • 통해 JCache 캐싱 공급자, NCache JCache의 지원되는 기능을 사용합니다.
 

종속성 추가

Spring 애플리케이션을 구성하려면 먼저 Spring 및 Spring에 필요한 모든 Maven 종속성을 추가해야 합니다. NCache 제공하십시오.

<dependency>
    <groupId>com.alachisoft.ncache</groupId>
    <artifactId>ncache-spring</artifactId>
    <version>x.x.x</version>
</dependency>
 

Spring 캐싱 공급자를 통해 Spring 애플리케이션 구성

이러한 종속성을 추가한 후 Java 기반 또는 XML 기반 Bean 정의를 통해 Spring 애플리케이션에서 Bean을 정의하세요.

Java 기반 Bean 정의:
Java 기반 정의를 사용하여 Bean을 정의하려면 다음을 추가해야 합니다. @콩 CachingConfiguration 클래스의 주석에서 setConfigFile 메서드는 ncache-spring.xml 파일에 대한 경로를 지정합니다. 자세한 내용은 다음을 참조하십시오. Java 기반 Bean 정의.

@Configuration
class CachingConfiguration {
    @Bean
    public CacheManager cacheManager() {
        String resource = Path.of(System.getenv("NCHOME"), "config/ncache-spring.xml").toString();

        SpringConfigurationManager springConfigurationManager = new SpringConfigurationManager();
        springConfigurationManager.setConfigFile(resource);

        NCacheCacheManager cacheManager = new NCacheCacheManager();
        cacheManager.setSpringConfigurationManager(springConfigurationManager);

        return cacheManager;
    }
}

XML 기반 빈 정의:
XML 기반 정의를 사용하여 Bean을 정의하려면 캐싱을 활성화하고 다음을 지정하는 XML 파일을 추가해야 합니다. NCache 캐시 관리자로서. 캐시 관리자와 캐시 관리자 모두에 대해 Bean 태그를 정의해야 합니다. NCache구성 관리자. 또한 캐시 관리자에 대해 다음 속성을 지정해야 합니다.

  • springConfigurationManager: 참조 NCache 구성 관리자 빈.
  • 로그파일 경로: 캐시 관리자 로그의 완전한 경로입니다.
<bean id="cacheManager" class="com.alachisoft.integrations.spring.NCacheCacheManager">
	<property name="springConfigurationManager" ref="NCacheConfigurationManager"/>
	<property name="logFilePath" value=" C:\Program Files\NCache\log-files\CustomerDBSpringLogs"/>
</bean>
<bean id="NCacheConfigurationManager" class="com.alachisoft.integrations.spring.configuration.SpringConfigurationManager">
        <property name="configFile" value="ncache-spring.xml">
</bean>

자세한 내용은 XML 기반 Bean 정의.

또한 ncache-spring.xml 파일에서 캐시를 구성해야 합니다. NCache 관리 센터. 각 캐시에는 이 파일에 고유한 속성 집합이 포함된 고유한 정의가 필요합니다. 예를 들어:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<application-config default-cache-name="books">
  <caches>
    <cache name="books" ncacheid-instance="democache" priority="normal" expiration-type="absolute" expiration-period="300"/>
  </caches>
</application-config>
 

JCache(JSR-107) 프로바이더를 통해 Spring 애플리케이션을 구성하는 방법

Spring은 또한 Spring 애플리케이션에서 JCache를 사용할 수 있는 JCache 호환 캐싱 제공자를 지원합니다. NCache. 먼저 Spring용 Maven 종속성을 추가합니다. NCache및 JCache. 종속성을 추가한 후 캐시를 구성합니다.

  • 추가 spring.cache.cache 이름 ~에있는 태그 응용 프로그램 속성 파일. 캐시 이름은 NCache 관리 센터.
  • 다음을 통해 캐시를 구성하십시오. JCacheManagerCustomizer 원하는 구성으로 런타임에 캐시를 초기화하는 클래스입니다.

자세한 내용은 JCache 스프링 문서.

 

선언적 캐싱을 사용하는 방법 @Cacheable 봄 데이터에서

위에 정의된 두 구성을 모두 통해 캐싱을 활성화하면 다음 단계는 이러한 캐싱 동작을 사용할 해당 메서드에 바인딩하는 것입니다. NCache Spring용 캐싱 제공자로서.

두 가지 방법으로 캐싱 동작을 해당 메서드에 바인딩할 수 있습니다. 하나는 끝났어 캐싱 주석.

// BookController.java
@RestController
@RequestMapping("/books")
public class BookController {
    @Autowired
    // Get a Spring Service to save objects in the DB. This also caches them with 5min absolute (TTL) expiration.
    BookService service = context.getBean(BookService.class);
    service.save(new Book(18001, "The Second Machine Age", "Erik Brynjolfsson, Andrew McAfee", new Date(2014, 0, 20)));

    // Print all saved books details
    printBooks(service.listAll());

    // Use Spring Service to get a book from the DB. It actually comes from the cache
    Book foundBook = service.findBookByIsbn(18001);
    printBookDetails(foundBook);

    foundBook.setAuthor("New Author");
    Book UpdatedBook = service.update(foundBook);

    printBookDetails(UpdatedBook);
    context.close();
    System.exit(0);
    }

// BookService.java
@Service
class BookService {
    @Autowired
    private BookRepository repo;

    public List<Book> listAll() {
        return repo.findAll();
    }

    @CachePut(value = "demoCache", key = "#book.getISBN()")
    public Book save(Book book) { return repo.save(book); }

    @CachePut(value = "demoCache", key = "#book.getISBN()")
    public Book update(Book book) { return repo.save(book); }

    @Cacheable(value = "demoCache", key = "#id")
    public Book get(int id) {
        return repo.findById(id);
    }

    @Cacheable(value = "demoCache", key = "#isbn")
    public Book findBookByIsbn(long isbn) {
        return repo.findBookByIsbn(isbn);
    }

    @CacheEvict(value = "demoCache", allEntries = true)
    public void delete(int id) {
        repo.deleteById(id);
    }
}

주석을 사용하지 않으면 선언적 XML 기반 캐싱 외부에서 대상 메서드 및 캐싱 지시문을 지정할 수 있는 곳에서 사용할 수 있습니다.

<!-- the service we want to make cacheable -->
<bean id="bookService" class="x.y.service.BookService"/>
<!-- cache definitions -->
<cache:advice id="booksCacheAdvice" cache-manager="cacheManager">
    <cache:caching cache="demoCache">
        <cache:cacheable method="getBookNameByIsbn" key="#isbn"/>
        <cache:cache-evict method="loadBooks" all-entries="true"/>
    </cache:caching>
</cache:advice>

다음에 무엇을할지?

자주 묻는 질문 (FAQ)

NCache Spring Data의 성능을 향상시키는데, 이는 분산형 인메모리 캐시 역할을 하여 데이터베이스 병목 현상을 제거하기 때문입니다. 자주 액세스하는 데이터를 확장 가능한 미들 티어에 저장함으로써, NCache 지연 시간이 긴 데이터베이스 접근 횟수를 줄여, 트랜잭션 처리량이 많은 Java 애플리케이션에 대해 1밀리초 미만의 응답 시간을 제공합니다.

네! NCache JCache(JSR-107) 표준을 완벽하게 준수합니다. 통합할 수 있습니다. NCache 표준화된 JCache 공급자를 사용하여 Spring 애플리케이션에 통합하면 벤더에 구애받지 않는 캐싱 로직을 구현하고 코드 변경 없이 원활하게 마이그레이션할 수 있습니다.

The NCache Spring Caching Provider는 고급 기능을 제공하는 네이티브 통합 솔루션입니다. NCacheJCache는 유연한 만료 및 잠금과 같은 특정 기능을 제공합니다. JCache는 상호 운용성을 보장하는 표준화된 Java API(JSR-107)입니다. 둘 다 어노테이션을 사용하여 선언적 캐싱을 지원합니다. @캐시 가능.

선언적 캐싱을 활성화하려면 다음을 추가하세요. @EnableCaching 구성 클래스에 어노테이션을 추가하고 정의합니다. NCache 캐시매니저 콩. 그런 다음 사용할 수 있습니다. @캐시 가능 서비스 메서드에 어노테이션을 추가하여 데이터를 자동으로 저장하고 검색할 수 있습니다. NCache 클러스터.

네! NCache 선형 확장성을 제공하여 애플리케이션을 중지하지 않고도 런타임에 클러스터에 캐시 서버를 추가할 수 있습니다. 이를 통해 Spring Data 트랜잭션 부하가 증가함에 따라 캐싱 계층이 비례적으로 확장되어 성능을 유지할 수 있습니다.

문의하기

전화

+1 214-619-2601 (미국)

© 저작권 Alachisoft 2002 - . 판권 소유. NCache 는 Diyatech Corp.의 등록상표입니다.