NCache fornisce supporto JSON, una sintassi strutturata, leggibile e leggera per l'analisi e la condivisione dei dati. La maggiore facilità fornita da NCache tramite Cache Data as JSON è la flessibilità di recuperare i dati di qualsiasi classe personalizzata nella cache come JSON. Inoltre, i dati possono essere aggiunti come JSON e recuperati e analizzati come una classe personalizzata.
NCache supporta JSON tramite:
NCache consente di aggiungere e recuperare i dati della cache nel formato JSON. NCache supporta più strutture JSON per inserire e recuperare i dati JSON in modo efficiente. Queste strutture sono:
Entrambe queste strutture derivano da una classe astratta dal nome JsonValueBase. I paragrafi seguenti spiegano queste classi e il loro utilizzo in NCache per memorizzare e recuperare i dati.
Json Object rappresenta JOggetto negli standard JSON nel NCache dominio. Json Object contiene coppie nome-valore non ordinate e viene aggiunto alla cache rispetto a una chiave univoca che viene successivamente utilizzata per eseguire operazioni di cache. Per recuperare i dati della cache come JSON, NCache consente di recuperare qualsiasi classe personalizzata come a Json Object.
Puoi inserire un Json Object alla cache nel modo seguente. Questo esempio mostra come popolare a Json Object con una stringa serializzata e aggiungerla alla cache.
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 consente di recuperare un oggetto personalizzato memorizzato nella cache sotto forma di a Json Object. Questo restituisce una stringa JSON contenente i dati della tua classe personalizzata. NCache consente anche di memorizzare nella cache a Json Object e recuperarlo come oggetto personalizzato utilizzando la stessa Get API. Ecco un esempio di come recuperare un oggetto personalizzato come oggetto JSON:
var jsonObject = cache.Get<JsonObject>(key);
var jsonObject = cache.get(key, JsonObject.class);
JsonArray in NCache è la rappresentazione di JArray negli standard JSON. JsonArray è un elenco ordinato di valori. Questi valori possono essere stringa, numero, booleano, oggetto o un altro array.
È possibile aggiungere Json Object o anche un altro JsonArray in un JsonArray. NCache usa la proprietà dell'indicizzatore per aggiungere e aggiornare i valori in a JsonArray. Puoi creare un JsonArray utilizzando un Json Object nel seguente modo:
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, puoi anche aggiungere dati JSON a indici specificati in a JsonArray. Se un elemento esiste già nell'indice specificato, viene sovrascritto. Se l'indice specificato non esiste, l'elemento viene aggiunto a quell'indice e tutti i valori tra l'ultimo indice popolato e il nuovo indice vengono impostati su Json Null (nullo negli standard JSON).
NCache ti consente di recuperare l'intero JsonArray dalla cache o recuperare il valore da un particolare indice su JsonArray. Una volta recuperato, è possibile enumerarlo o eseguire operazioni basate sull'indice sui dati. Ecco come puoi recuperare un JsonArray o un valore particolare dalla cache:
// 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 ti consente anche di portare JsonEnumerator nella cache per recuperare tutti gli oggetti JSON e gli array JSON nel modo seguente:
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 è una cache distribuita ricca di funzionalità che fornisce molte funzionalità per facilitare l'archiviazione e il recupero dei dati. Proprio come per gli oggetti nativi e personalizzati, NCache supporta anche tali funzionalità per i dati di tipo JSON.
NCache ti consente di indicizzare i dati JSON in base al loro tipo.
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);
Dopo aver indicizzato i dati JSON in base al loro tipo, puoi eseguire query di tipo SQL per recuperare o eliminare i dati dalla cache. Per ulteriori informazioni su come utilizzare tutti questi attributi ricercabili durante l'esecuzione di query sui dati JSON, fare riferimento alla nostra documentazione su Interroga i dati 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
}
Quando si archiviano i dati nella cache, NCache ti consente di assicurarti che i dati con cui stai lavorando non siano obsoleti. Per garantire ciò, NCache ha fornito le seguenti funzionalità che mantengono sincronizzati la cache e il database.
Nella serializzazione JSON, gli oggetti vengono convertiti nel loro equivalente JSON quando vengono serializzati e quindi riconvertiti nei loro oggetti personalizzati al momento della deserializzazione.
NCache fornisce il supporto della serializzazione JSON per oggetti .NET e Java.
Supponiamo che tu abbia i seguenti attributi di prodotto in .NET. Puoi memorizzare questo oggetto nella cache come oggetto personalizzato come mostrato di seguito:
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" });
In alternativa, serializzare questi dati utilizzando la serializzazione JSON. Quando si opta per la serializzazione JSON, questi dati verranno serializzati nella seguente stringa JSON:
{
"Name": "Pizza",
"Expiry": "2020-3-28T00:00:00",
"Sizes": ["Large", "Medium"]
}
La serializzazione JSON è efficiente in termini di memoria, portabile e completamente automatizzata e non richiede modifiche al codice per l'implementazione. NCache consente inoltre di specificare quali attributi si desidera serializzare e quali lasciare così com'è.