NCache JSON サポート、解析およびデータ共有のための構造化された人間が判読可能な軽量構文を提供します。提供される主な容易さは、 NCache データをJSONとしてキャッシュすることで、キャッシュ内のカスタムクラスのデータをJSONとして取得できる柔軟性が得られます。 さらに、データをJSONとして追加し、カスタムクラスとして取得および解析することができます。
NCache 以下を通じて JSON をサポートします。
NCache を使用すると、JSON 形式でキャッシュ データを追加および取得できます。 NCache JSONデータを効率的に挿入およびフェッチするための複数のJSON構造をサポートします。 これらの構造は次のとおりです。
これらの構造は両方とも、名前の抽象クラスから派生しています JsonValueBase。次の段落では、これらのクラスとその使用法について説明します。 NCache データを保存および取得します。
Jsonオブジェクト 表し JObject JSON標準で NCache ドメイン。 Jsonオブジェクト 順序付けされていない名前と値のペアを保持し、後でキャッシュ操作を実行するために使用される一意のキーに対してキャッシュに追加されます。キャッシュデータをJSONとして取得するには、 NCache 任意のカスタムクラスをとして取得できるようにします Jsonオブジェクト.
あなたは挿入することができます Jsonオブジェクト 次の方法でキャッシュに移動します。 この例は、 Jsonオブジェクト シリアル化された文字列を使用してキャッシュに追加します。
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 キャッシュされたカスタムオブジェクトを次の形式で取得できます。 Jsonオブジェクト。 これにより、カスタムクラスのデータを含むJSON文字列が返されます。 NCache また、キャッシュすることができます Jsonオブジェクト 同じ Get API を使用してカスタム オブジェクトとして取得します。カスタム オブジェクトを JSON オブジェクトとして取得する方法の例を次に示します。
var jsonObject = cache.Get<JsonObject>(key);
var jsonObject = cache.get(key, JsonObject.class);
JsonArray in NCache の表現です Jアレイ JSON標準で。 JsonArray 値の順序付きリストです。 これらの値は、文字列、数値、ブール値、オブジェクト、または別の配列にすることができます。
あなたが追加することができます Jsonオブジェクト または別の JsonArray JsonArray. NCache インデクサープロパティを使用して、 JsonArray。 あなたは作成することができます JsonArray 使用して Jsonオブジェクト 次のようにします。
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 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 また、シリアル化する属性とそのままにする属性を指定することもできます。