NCache 이 도구는 분산형 JCache Provider 역할을 하며, Java 애플리케이션이 JSR 107 표준을 준수하는 캐싱을 활용하여 데이터베이스 병목 현상을 제거하고 수평 확장을 가능하게 합니다. JCache는 Java 객체의 메모리 내 캐싱에 사용되는 Java 기반 API입니다. 여기에는 객체 생성, 무효화, 스풀링, 공유 액세스 및 Java 가상 머신(JVM) 간의 일관성 유지가 포함됩니다.
NCache 광범위한 기능 및 도구 세트와 함께 제공되는 매우 강력하고 다재다능한 분산 캐싱 솔루션입니다. NCache 이 구현은 JSR 107 사양의 고성능 구현을 제공하여 밀리초 미만의 지연 시간으로 분산 캐싱이 필요한 Java 애플리케이션과의 완벽한 호환성을 보장합니다. 이 구현을 활용하면 다음과 같은 기능을 통합할 수 있습니다. NCache아키텍처상의 마찰 없이 엔터프라이즈급 기능을 JCache 호환 환경에 통합할 수 있습니다.
캐시에서 작업을 수행하려면 JCache 인스턴스를 생성해야 합니다. Java에서 getCache() 메서드는 JCache 인스턴스를 가져오는 가장 편리한 메서드 중 하나로 간주됩니다. 다음 코드 예제는 이 메서드를 사용하여 캐시를 초기화하는 방법을 보여줍니다.
/*Create an instance of JCache's caching provider to get JCacheManager's instance */
CachingProvider provider = Caching.getCachingProvider();
CacheManager manager = provider.getCacheManager();
/*Get a cache from manager via its string name.*/
javax.cache.Cache jCache = manager.getCache("myreplicatedcache");
캐시가 성공적으로 초기화되고 캐시 핸들을 얻은 후에는 캐시에서 다음과 같은 많은 작업을 수행할 수 있습니다. 첨가, 가져 오는 중, 업데이트예산 및 삭제 중 캐시의 데이터.
다음 코드 예제는 캐시 인스턴스(위의 코드 예제에서 만든)를 사용하여 캐시에서 기본 작업을 수행하는 방법을 보여줍니다.
/*Adding data to the cache*/
Product product = fetchProductFromDB();
String key = "Product:" + product.getProductID();
jCache.put(key, product);
/*Update data in the cache*/
product.setUnitsInStock(newValue); // updated units
jCache.replace(key, product);
/*Get data from the cache*/
Object item = jCache.get(key);
/*Remove data from the cache*/
Boolean result = jCache.remove(key);
JCache의 또 다른 기능은 데이터 만료 여기서 캐시 데이터는 시간을 기준으로 만료됩니다. JCache는 두 가지 주요 유형의 만료를 지원합니다. 절대 만료 슬라이딩 만료. 절대 만료에서는 캐시 내의 데이터가 고정된 시간 간격 후에 만료됩니다. 슬라이딩 만료에서 캐시 내의 데이터는 시간 간격 후에 만료되지만 이 시간 간격은 이 데이터에 액세스할 때마다 재설정됩니다.
절대 및 슬라이딩 만료가 정의된 캐시에서 항목을 추가하고 업데이트할 수 있습니다. 다음 코드 예제에서 데이터는 절대 만료가 정의된 캐시에 추가됩니다.
CachingProvider cachingProvider = Caching.getCachingProvider();
CacheManager manager = cachingProvider.getCacheManager();
Customer customer = new Customer();
customer.setAge(22);
String key = "Customer:" + customer.getCustomerID();
//configure the expiration duration
CompleteConfiguration<Object, Object> cacheConfig = new MutableConfiguration().setExpiryPolicyFactory(CreatedExpiryPolicy.factoryOf(Duration.ONE_MINUTE));
//create cache with customized configuration settings
javax.cache.Cache jCache = manager.createCache("mypartitionedcache", cacheConfig);
//add item to cache which will expire after 1 minute
jCache.put(key, customer);
캐시 수준 알림 등록된 특정 이벤트가 발생할 때 트리거되는 일반 이벤트입니다. JCache에서 이벤트 알림을 받으려면 관련 이벤트 관련 인터페이스를 구현해야 합니다.
아래 예에서는 이벤트 필터 팩터리를 구현했다고 가정합니다.
// class that implements the event-listener factory
public class MyCacheEntryListener<K, V>
implements CacheEntryCreatedListener<K, V>, Serializable
{...
for (CacheEntryEvent<? extends K,? extends V> event: events)
{
System.out.println("Received a " + event);
}
...
}
...
//configuring
MyCacheEntryListener<String,String> m_listener = new MyCacheEntryListener<String,String>();
MutableConfiguration<String, String> config = new MutableConfiguration<String, String>();
config.setTypes(String.class, String.class).addCacheEntryListenerConfiguration(
new MutableCacheEntryListenerConfiguration<String, String>
(FactoryBuilder.factoryOf(m_listener),FactoryBuilder.factoryOf(
new MyCacheEntryEventFilter<String, String>()),true,true));
Cache<String, String> jCache = cacheManager.createCache("myreplicatedcache", config);
에서 제공하는 API NCache JCache에서 제공하는 API보다 더 강력한 기능을 제공합니다. 일부 기능은 NCache 제공하지만 JCache가 제공하지 않는 경우는 다음과 같습니다.
몇 가지 특징은 다음과 같습니다. NCache 제공하지만 JCache가 제공하지 않는 경우는 다음과 같습니다.
| 제품 특장점 | 표준 JCache(JSR 107) | NCache JCache 제공자 |
|---|---|---|
| 검색 | 키 기반 방식만 사용 가능 | SQL 및 LINQ 쿼리 |
| 데이터 태그 | 지원되지 않음 | unwrap을 통해 지원됩니다. |
| 고집 | Basic | 정독/정독 |
| 스케일링 | JVM에 의해 제한됨 | 선형적으로 확장 가능한 클러스터 |
에서 제공하는 이 모든 기능을 사용하려면 NCache API 캐시 인스턴스가 있어야 합니다.
다음 코드 예제는 JCache API를 사용하여 캐시 인스턴스를 가져오는 방법을 보여줍니다. NCache unwrap 방법을 사용하여. 이 인스턴스는 다음을 사용하여 캐시에 데이터를 추가하는 데 사용됩니다. 태그 (의 특징 NCache) 활성화. 이러한 태그는 나중에 캐시에서 데이터를 검색하기 위해 키 대신 사용할 수 있습니다.
...
com.alachisoft.ncache.client.Cache cache = null;
cache = (com.alachisoft.ncache.client.Cache) jCache.unwrap(com.alachisoft.ncache.client.Cache.class);
Customer customer = fetchCustomer();
String customerKey = “Customer” + customer.getCustomerID();
// Specify Tags
List<Tag> tags = List.of(new Tag("East Coast Customers"));
CacheItem cacheItem = new CacheItem(customer);
cacheItem.setTags(tags);
cache.add(customerKey, cacheItem);