NCache 구문 분석 및 데이터 공유를 위한 체계적이고 사람이 읽을 수 있는 경량 구문인 JSON 지원을 제공합니다. 제공되는 주요 용이성 NCache Cache Data as JSON을 통해 캐시에 있는 모든 사용자 지정 클래스의 데이터를 JSON으로 검색할 수 있는 유연성을 얻을 수 있습니다. 또한 데이터를 JSON으로 추가하고 사용자 지정 클래스로 검색 및 구문 분석할 수 있습니다.
NCache 다음을 통해 JSON을 지원합니다.
NCache JSON 형식으로 캐시 데이터를 추가하고 검색할 수 있습니다. NCache JSON 데이터를 효율적으로 삽입하고 가져오기 위해 여러 JSON 구조를 지원합니다. 이러한 구조는 다음과 같습니다.
이 두 구조는 이름으로 추상 클래스에서 파생됩니다. JsonValueBase. 다음 단락에서는 이러한 클래스와 사용법을 설명합니다. NCache 데이터를 저장하고 검색합니다.
JsonObject 대표 JObject JSON 표준에서 NCache 도메인입니다. JsonObject 순서가 지정되지 않은 이름-값 쌍을 보유하며 나중에 캐시 작업을 수행하는 데 사용되는 고유 키에 대해 캐시에 추가됩니다. 캐시 데이터를 JSON으로 검색하려면, NCache 모든 사용자 정의 클래스를 JsonObject.
당신은 삽입 할 수 있습니다 JsonObject 다음과 같은 방법으로 캐시에 저장합니다. 이 예는 JsonObject 직렬화된 문자열을 사용하여 캐시에 추가합니다.
var product = FetchProductFromDB("1001");
string jsonString = @$"{{
""ProductID"" : ""{product.ProductID}"",
""ProductName"" : ""{product.ProductName}"",
""Category"" : ""{product.Category}"",
""UnitsAvailable"" : ""{product.UnitsAvailable}""
}}";
JsonObject jsonObject = new JsonObject(jsonString, "Alachisoft.NCache.Sample.Product");
string key = "Product:" + product.ProductID;
// Inserting object in cache
cache.Insert(key, jsonObject);
Product product = Product.fetchProductFromDB("Product:1001");
String jsonString = "{\"ProductID\":\"" + product.getProductID() + "\"," +
"\"ProductName\":\"" + product.getProductName() + "\"," +
"\"Category\":\"" + product.getCategory() + "\"," +
"\"UnitsAvailable\":" + product.getUnitsAvailable() +
"}";
JsonObject jsonObject = new JsonObject(jsonString, "com.alachisoft.ncache.sample.Product");
String key = "Product:" + product.getProductID();
// Inserting object in Cache
cache.insert(key, jsonObject);
NCache 의 형태로 캐시된 사용자 정의 개체를 검색할 수 있습니다. JsonObject. 이렇게 하면 사용자 정의 클래스의 데이터가 포함된 JSON 문자열이 반환됩니다. NCache 또한 캐시할 수 있습니다. JsonObject 동일한 Get API를 사용하여 사용자 정의 개체로 가져옵니다. 다음은 사용자 정의 개체를 JSON 개체로 검색하는 방법의 예입니다.
var jsonObject = cache.Get<JsonObject>(key);
var jsonObject = cache.get(key, JsonObject.class);
JsonArray in NCache 의 대표이다 JArray JSON 표준에서. JsonArray 정렬된 값 목록입니다. 이러한 값은 문자열, 숫자, 부울, 개체 또는 다른 배열일 수 있습니다.
당신은 추가 할 수 있습니다 JsonObject 또는 다른 JsonArray 에 JsonArray. NCache indexer 속성을 사용하여 JsonArray. 당신은 만들 수 있습니다 JsonArray 를 사용하여 JsonObject 다음과 같은 방법으로
var jsonArray = new JsonArray();
...
var jsonObject1 = new JsonObject(jsonString1 );
jsonArray.Add(jsonObject1);
var jsonObject2 = new JsonObject(jsonString2);
jsonArray.Add(jsonObject2);
string key = “JsonArrray:1001”;
cache.Insert(key, jsonArray);
var jsonArray = new JsonArray();
//...
var jsonObject1 = new JsonObject(jsonString1, "com.alachisoft.ncache.sample.Product");
jsonArray.add(jsonObject1);
var jsonObject2 = new JsonObject(jsonString2, "com.alachisoft.ncache.sample.Product");
jsonArray.add(jsonObject2);
String key = "JsonArray:1001";
// Inserting JsonArray in Cache
cache.insert(key, jsonArray);
In NCache의 지정된 인덱스에 JSON 데이터를 추가할 수도 있습니다. JsonArray. 항목이 지정된 인덱스에 이미 있으면 덮어씁니다. 지정된 인덱스가 없으면 해당 인덱스에 항목이 추가되고 마지막으로 채워진 인덱스와 새 인덱스 사이의 모든 값이 다음으로 설정됩니다. JsonNull (JSON 표준에서는 null).
NCache 전체를 가져올 수 있습니다. JsonArray 캐시에서 또는 특정 색인에서 값을 검색합니다. JsonArray. 검색되면 데이터를 열거하거나 데이터에 대한 인덱스 기반 작업을 수행할 수 있습니다. 이것은 당신이 JsonArray 또는 캐시의 특정 값:
// Retrieve JsonArray from cache
string key = "JsonArray:1001";
JsonArray jsonArray = cache.Get<JsonArray>(key)
// Retrieve the value of the specified index
JsonValueBase value = jsonArray[2];
// Retrieve JSONArray from cache
String key = "JsonArray:1001";
JsonArray jsonArray = cache.get(key, JsonArray.class);
// Retrieve the value of the specified index
JsonValueBase value = jsonArray.getItem(2);
NCache 또한 캐시에서 JsonEnumerator를 사용하여 다음과 같은 방법으로 모든 JSON 개체 및 JSON 배열을 가져올 수 있습니다.
var enumerator = (IDictionaryEnumerator)_cache.GetJsonEnumerator();
while (enumerator.MoveNext())
{
DictionaryEntry entry = (DictionaryEntry)enumerator.Current;
JsonValueBase valueBase = (JsonValueBase)entry.Value;
//...
}
var enumerator = cache.asJsonIterator();
while (enumerator.hasNext())
{
Entry entry = (Entry) enumerator.next();
JsonValueBase valueBase = (JsonValueBase) entry.getValue();
//...
}
NCache 데이터를 쉽게 저장하고 검색할 수 있도록 많은 기능을 제공하는 기능이 풍부한 분산 캐시입니다. 네이티브 및 커스텀 객체와 마찬가지로 NCache JSON 유형 데이터에도 이러한 기능을 지원합니다.
NCache 유형에 따라 JSON 데이터를 인덱싱할 수 있습니다.
Product product = FetchProductFromDB();
string jsonString = @$"{{ ""ProductID"" : ""{product.ProductID}"", ""ProductName"" : ""{product.ProductName}"", ""Price"" : {product.Price} }}";
JsonObject jsonObject = new JsonObject(jsonString, "Alachisoft.NCache.Sample.Product");
string key = "Product:" + product.ProductID;
cache.Insert(key, jsonObject);
Product product = Product.fetchProductFromDB("Product:1001");
String jsonString = "{\"productID\":\"" + product.getProductID() + "\", \"productName\" : \""+ product.getProductName() + "\", \"price\":\"" + product.getPrice() + "\"}";
JsonObject jsonObject = new JsonObject(jsonString,"com.alachisoft.ncache.sample.Product" );
String key = "Product:" +product.getProductID();
cache.insert(key, jsonObject);
유형에 따라 JSON 데이터를 인덱싱한 후에는 SQL과 유사한 쿼리를 수행하여 캐시에서 데이터를 가져오거나 삭제할 수 있습니다. JSON 데이터를 쿼리하는 동안 검색 가능한 모든 속성을 사용하는 방법에 대한 자세한 내용은 다음 문서를 참조하세요. JSON 데이터 쿼리.
string query = "Select * FROM Alachisoft.NCache.Runtime.JSON.JsonObject WHERE Discount = ?";
QueryCommand queryCommand = new QueryCommand(query);queryCommand.Parameters.Add("Discount", 0.5);
var queryResult = cache.SearchService.ExecuteReader(queryCommand);
// QueryResult contains all the keys and metadata of result
if (queryResult.FieldCount > 0) {
while (queryResult.Read()) {
// Perform operation according to your logic
}
}
else
{
// No data
}
String query = "Select * FROM Alachisoft.NCache.Runtime.JSON.JsonObject WHERE Discount = ?";
QueryCommand queryCommand = new QueryCommand(query);
queryCommand.getParameters().put("Discount", 0.5);
var queryResult = cache.getSearchService().executeReader(queryCommand);
if (queryResult.getFieldCount() > 0) {
while (queryResult.read()) {
// Perform operation according to your logic
}
}
else {
// No data
}
캐시에 데이터를 저장할 때, NCache 작업 중인 데이터가 오래되지 않았는지 확인할 수 있습니다. 이를 보장하기 위해, NCache 캐시와 데이터베이스를 동기화하는 다음과 같은 기능을 제공합니다.
JSON 직렬화에서 개체는 직렬화될 때 해당하는 JSON으로 변환된 다음 역직렬화 시 사용자 지정 개체로 다시 변환됩니다.
NCache .NET 및 Java 개체 모두에 대한 JSON 직렬화 지원을 제공합니다.
.NET에 다음과 같은 제품 특성이 있다고 가정해 보겠습니다. 아래와 같이 이 개체를 사용자 정의 개체로 캐시에 저장할 수 있습니다.
Product product = new Product();
product.Name = "Pizza";
product.Expiry = new DateTime(2020, 3, 28);
product.Sizes = new string[] { "Large", "Medium" };
Product product = new Product();
product.setName("Pizza");
product.setExpiry(new Date(2020, 3, 28));
product.setSizes(new String[] { "Large", "Medium" });
또는 JSON 직렬화를 사용하여 이 데이터를 직렬화합니다. JSON 직렬화를 선택하면 이 데이터가 다음 JSON 문자열로 직렬화됩니다.
{
"Name": "Pizza",
"Expiry": "2020-3-28T00:00:00",
"Sizes": ["Large", "Medium"]
}
JSON 직렬화는 메모리 효율적이고 이식 가능하며 구현을 위해 코드를 변경할 필요가 없는 완전 자동화된 방식입니다. NCache 또한 직렬화하려는 속성과 그대로 둘 속성을 지정할 수 있습니다.