NCache fornece suporte JSON, uma sintaxe estruturada, legível e leve para análise e compartilhamento de dados. A maior facilidade proporcionada NCache para você por meio de dados de cache como JSON é a flexibilidade de recuperar dados de qualquer classe personalizada em seu cache como JSON. Além disso, os dados podem ser adicionados como JSON e recuperados e analisados como uma classe personalizada.
NCache suporta JSON por meio de:
NCache permite adicionar e recuperar dados de cache no formato JSON. NCache suporta várias estruturas JSON para inserir e buscar dados JSON com eficiência. Essas estruturas são:
Ambas as estruturas são derivadas de uma classe abstrata chamada JsonValueBase. Os parágrafos a seguir explicam essas classes e seu uso em NCache para armazenar e recuperar dados.
JsonObjectName representa JObject em padrões JSON no NCache domínio. JsonObjectName contém pares nome-valor não ordenados e é adicionado ao cache em uma chave exclusiva que é posteriormente usada para executar operações de cache. Para recuperar dados de cache como JSON, NCache permite que qualquer classe personalizada seja recuperada como um JsonObjectName.
Você pode inserir um JsonObjectName para o cache da seguinte maneira. Este exemplo mostra como preencher um JsonObjectName com uma string serializada e adicione-a ao 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 permite que você recupere um objeto personalizado em cache na forma de um JsonObjectName. Isso retorna uma string JSON contendo os dados de sua classe personalizada. NCache também permite armazenar em cache um JsonObjectName e busque-o como um objeto personalizado usando a mesma API Get. Aqui está um exemplo de como recuperar um objeto personalizado como um objeto JSON:
var jsonObject = cache.Get<JsonObject>(key);
var jsonObject = cache.get(key, JsonObject.class);
JsonArrayName in NCache é a representação de JArray nos padrões JSON. JsonArrayName é uma lista ordenada de valores. Esses valores podem ser string, number, boolean, object ou outro array.
Você pode adicionar JsonObjectName ou mesmo outro JsonArrayName em uma JsonArrayName. NCache usa a propriedade do indexador para adicionar e atualizar valores em um JsonArrayName. Você pode criar um JsonArrayName utilizando um JsonObjectName Da seguinte maneira:
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, você também pode adicionar dados JSON em índices especificados em um JsonArrayName. Se um item já existir no índice especificado, ele será substituído. Se o índice especificado não existir, o item será adicionado a esse índice e todos os valores entre o último índice preenchido e o novo índice serão definidos como JsonNullGenericName (nulo nos padrões JSON).
NCache permite que você obtenha todo o JsonArrayName do cache ou recuperar o valor de um índice específico no JsonArrayName. Uma vez recuperado, você pode enumerá-lo ou realizar operações baseadas em índice nos dados. É assim que você pode buscar um JsonArrayName ou um valor específico do 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 também permite que você coloque JsonEnumerator no cache para buscar todos os objetos JSON e matrizes JSON da seguinte maneira:
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 é um cache distribuído rico em recursos que fornece muitos recursos para facilitar o armazenamento e a recuperação de seus dados. Assim como para objetos nativos e personalizados, NCache também oferece suporte a esses recursos para dados do tipo JSON.
NCache permite indexar dados JSON com base em seu 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);
Depois de indexar os dados JSON com base em seu tipo, você pode realizar consultas semelhantes a SQL para buscar ou excluir os dados do cache. Para obter mais informações sobre como usar todos esses atributos pesquisáveis ao consultar dados JSON, consulte nossa documentação em Consultar dados 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
}
Ao armazenar dados no cache, NCache permite garantir que os dados com os quais você está trabalhando não estejam obsoletos. Para garantir isso, NCache forneceu os seguintes recursos que mantêm seu cache e banco de dados sincronizados.
Na serialização JSON, os objetos são convertidos em seu equivalente JSON quando serializados e, em seguida, convertidos novamente em seus objetos personalizados no momento da desserialização.
NCache fornece suporte de serialização JSON para objetos .NET e Java.
Vamos considerar que você tem os seguintes atributos de produto em .NET. Você pode armazenar este objeto no cache como um objeto personalizado conforme mostrado abaixo:
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" });
Ou serialize esses dados usando a serialização JSON. Ao optar pela serialização JSON, esses dados serão serializados para a seguinte string JSON:
{
"Name": "Pizza",
"Expiry": "2020-3-28T00:00:00",
"Sizes": ["Large", "Medium"]
}
A serialização JSON é eficiente em termos de memória, portátil e totalmente automatizada, não exigindo nenhuma alteração de código para sua implementação. NCache também permite especificar quais atributos você deseja serializar e quais deixar como estão.