Récupérer les données de cache existantes
Tandis que NCache prend également en charge l'interrogation des données du cache, il utilise l'architecture clé-valeur de son magasin pour maximiser les moyens de récupération des données. Vous pouvez récupérer un objet personnalisé, un CacheItem ou des éléments en masse du cache à l'aide de la clé unique associée à l'élément. NCache fournit diverses surcharges du Get
méthode pour récupérer des éléments des données du cache en fonction de la clé spécifiée.
Conditions préalables pour récupérer les données de cache existantes
Récupérer les données du cache
Notes
Cette fonctionnalité est également disponible dans NCache Professional.
Vous pouvez récupérer un objet personnalisé à partir des données du cache en utilisant diverses surcharges du Get
méthode en spécifiant la clé de l'élément de cache. L'objet est récupéré en tant que modèle, il doit donc être transtypé en conséquence s'il s'agit d'un objet de classe personnalisé.
Important
Si la clé n'existe pas dans le cache, une valeur nulle est renvoyée.
L'exemple suivant récupère un élément existant du Témoignages classe avec la clé spécifiée. Garde en tête que Get
renvoie un modèle qui doit être converti en conséquence, de sorte que l'objet est converti en Customer
tapez dans cet exemple.
// Precondition: Cache is already connected
string customerKey = "Customer:ALFKI";
// Retrieve the Customer object
Customer customer = cache.Get<Customer>(customerKey);
if (customer != null)
{
Console.WriteLine($"Customer: {customer.ContactName}, Address : {customer.Address}");
}
// Precondition: Cache is already connected
String customerKey = "ALFKI";
// Retrieve the Customer object
Customer customer = cache.get(customerKey, Customer.class);
System.out.println("Customer with key " + customerKey + " has value " + customer);
// This is an async method
// Precondition: Cache is already connected
// Get Product from database against given ProductID
var product = this.fetchProductFromDB(1001);
// Get key to fetch from cache
var key = "Product:" + this.product.getProductID();
// Create a CacheItem
var cacheItem = new ncache.CacheItem(product);
await this.cache.insert(key , cacheItem);
// Get item against key from cache in given Class type
var retrievedItem = await this.cache.get(key, Product);
if (retrievedItem != null)
{
// Perform your logic
}
else
{
// Null returned; no key exists
}
# Precondition: Cache is already connected
# Get Product from database against given ProductID
product = fetch_product_from_db()
# Get key to fetch from cache
key = "Product:" + product.get_product_id()
# Create a CacheItem
cache_item = ncache.CacheItem(product)
cache.insert(key, cache_item)
# Get item against key from cache in given Class type
retrieved_item = cache.get(key, Product)
if retrieved_item is not None:
# Perform your logic
print("Item received")
else:
# Null returned; no key exists
print("Key does not exist")
Notes
Pour garantir la sécurité de l'opération, il est recommandé de gérer toutes les exceptions potentielles au sein de votre application, comme expliqué dans Gestion des échecs.
Récupérer l'élément de cache du cache
Notes
Cette fonctionnalité est également disponible dans NCache Professional.
NCache permet de récupérer un existant CacheItem
du cache en utilisant le dédié GetCacheItem
API. Cela renvoie un CacheItem
associé à la clé spécifiée. Son Value
La propriété encapsule les données.
L'exemple suivant récupère un fichier existant CacheItem
avec la clé spécifiée et vérifie si le résultat est de Témoignages type et type le transtypent en conséquence.
string customerKey = "Customer:ALFKI";
// Retrieve the CacheItem
CacheItem retrievedCacheItem = cache.GetCacheItem(customerKey);
if (retrievedCacheItem != null)
{
Customer customer = retrievedCacheItem.GetValue<Customer>();
Console.WriteLine($"Customer: {customer.ContactName}, Address : {customer.Address}");
}
String customerKey = "ALFKI";
// Retrieve the CacheItem from cache
CacheItem retrievedCacheItem = cache.getCacheItem(customerKey);
if (retrievedCacheItem != null) {
// Get the Customer object from the CacheItem
Customer customer = retrievedCacheItem.getValue(Customer.class);
System.out.println("Customer: " + customer.getContactName() + ", Phone: " + customer.getPhone());
}
// This is an async method
// Get key to fetch from cache
var key = "Product:" + this.product.getProductID();
// Get CacheItem from cache
var retrievedCacheItem = this.cache.getCacheItem(key);
// Get item against key from cache in given Class type
if (retrievedCacheItem != null)
{
this.cache.getValue(Product);
// Perform your logic
}
else
{
// Null returned; no key exists
}
# Generate key to fetch from cache
key = "Product:1001"
# Get CacheItem from cache
retrieved_cache_item = cache.get_cacheitem(key)
# Get item against key from cache in given Class type
if retrieved_cache_item is not None:
value = retrieved_cache_item.get_value(Product)
# Perform your logic
else:
# Null returned no key exists
print("Key does not exist")
Récupérer les éléments en vrac du cache
Notes
Cette fonctionnalité est également disponible dans NCache Professional.
NCache permet une récupération groupée synchrone d'éléments en un seul appel afin de réduire les coûts de réseau. Diverses surcharges du GetBulk
La méthode récupère les objets des données du cache pour les clés de cache spécifiées. Notez que la valeur est récupérée en tant que modèle et doit donc être convertie en conséquence s'il s'agit d'un objet de classe personnalisé.
Important
Si les clés existent dans le cache, un dictionnaire d'éléments de cache et leurs clés sont renvoyés.
L'exemple suivant récupère les CacheItems existants contenant des objets du Témoignages classe. Le résultat est renvoyé dans un IDictionary
de clés et de valeurs, qui peuvent être énumérées pour obtenir les valeurs réelles des clés. Depuis GetBulk
renvoie un modèle (qui doit être converti), l'objet est converti en Customer
tapez dans cet exemple. Si la clé spécifiée n'existe pas dans le cache, une valeur nulle est renvoyée.
// Create an array of all keys to fetch
String[] keys = new String[]
{
"Customer:ALFKI", "Customer:ANATR", "Customer:ANTON", "Customer:AROUT",
"Customer:BERGS"
};
// Get items from cache
IDictionary<string, Customer> retrievedItems = cache.GetBulk<Customer>(keys);
// Retrieve customers and their addresses from dictionary
foreach (KeyValuePair<string, Customer> retrievedItem in retrievedItems)
{
Console.WriteLine($"Customer: {retrievedItem.Value.ContactName}, Address : { retrievedItem.Value.Address}");
}
// Create an list of all keys to fetch
List<String> keys = List.of(
"Customer:ALFKI",
"Customer:ANATR",
"Customer:ANTON",
"Customer:AROUT",
"Customer:BERGS"
);
// Get items from cache
Map<String, Customer> retrievedItems = cache.getBulk(keys, Customer.class);
// Retrieve customers and their addresses from dictionary
for (Map.Entry<String, Customer> retrievedItem : retrievedItems.entrySet())
{
System.out.println("Customer: " + retrievedItem.getValue().getContactName() + ", Address: " + retrievedItem.getValue().getAddress());
}
// This is an async method
// Get Product from database against given ProductID
var products = await this.fetchProductFromDB();
// Get keys to fetch from cache
var keys = [products.length];
var index = 0;
products.forEach(product => {
keys[index] ="Product:" + this.product.getProductID();
index++;
});
// Get bulk from cache
var retrievedItems = await this.cache.getBulk(keys,Product);
// Check if any keys have failed to be retrieved
if(retrievedItems.size() == keys.length)
{
retrievedItems.forEach(entry => {
if(entry.getValue() instanceof Product)
{
// Perform operations according to business logic
}
else
{
// Object not of Product type
}
});
}
else
{
// Not all of the keys are present in cache
}
# Get Products from database
products = fetch_products_from_db()
# Get keys to fetch from cache
keys = []
index = 0
for product in products:
keys.append( "Product:" + product.get_product_id())
# Get bulk from cache
retrieved_items = cache.get_bulk(keys, Product)
# Check if any keys have failed to be retrieved
if len(retrieved_items) is len(keys):
# Perform operations according to business logic
print("All the items were retrieved successfully")
else:
# Not all the keys are present in cache
print("Some of the keys were not found")
Récupérer le gros des éléments de cache du cache
Notes
Cette fonctionnalité est également disponible dans NCache Professional.
Vous pouvez également récupérer une grande partie de CacheItem
utilisant l' GetCacheItemBulk
méthode. Voici un exemple:
// Create an array of all keys to fetch
String[] keys = new String[]
{
"Customer:ALFKI", "Customer:ANATR", "Customer:ANTON", "Customer:AROUT",
"Customer:BERGS"
};
// Get items from cache
IDictionary<string, Customer> retrievedItems = cache.GetBulk<Customer>(keys);
// Retrieve customers and their addresses from dictionary
foreach (KeyValuePair<string, Customer> retrievedItem in retrievedItems)
{
Console.WriteLine($"Customer: {retrievedItem.Value.ContactName}, Address : { retrievedItem.Value.Address}");
}
// Fetch a products array
Product[] products = fetchProducts();
// Get keys to fetch from cache
ArrayList<String> keys = new ArrayList<>(products.length);
for (Product product : products)
{
String key = "Product:" + product.getProductID();
keys.add(key);
cache.insert(key , product);
}
// Retrieve items from cache in a Map
java.util.Map<String, CacheItem> retrievedItems = cache.getCacheItemBulk(keys);
// Check if any keys have failed to be retrieved
if (retrievedItems.size() == keys.size())
{
for (java.util.Map.Entry<String, CacheItem> entry : retrievedItems.entrySet())
{
if (entry.getValue() != null)
{
Product prod = entry.getValue().<Product>getValue(Product.class);
// Perform operations according to business logic
}
else
{
// Object not of Product type
}
}
}
else
{
// Not all of the keys are present in cache
for (String key : keys)
{
if (!retrievedItems.containsKey(key))
{
// This key does not exist in cache
}
}
}
// This is an async method
// Get Product from database against given ProductID
var products = await this.fetchProductFromDB();
// Get keys to fetch from cache
var keys = [products.length];
var index = 0;
products.forEach(product => {
keys[index] ="Product:" + this.product.getProductID();
index++;
});
// Get bulk from cache
var retrievedItems = this.cache.getCacheItemBulk(keys);
// Check if any keys have failed to be retrieved
if(retrievedItems.size() == keys.length)
{
retrievedItems.forEach(entry => {
if(entry.getValue() instanceof ncache.CacheItem)
{
var prod = entry.getValue();
// Perform operations according to business logic
}
else
{
// Object not of Product type
}
});
}
else
{
// Not all of the keys are present in cache
keys.forEach(key => {
if(retrievedItems.containsKey(key) == false)
{
// key does not exist in cache
}
});
}
# Get Products from database
products = fetch_products_from_db()
# Get keys to fetch from cache
keys = []
index = 0
for product in products:
keys.append( "Product:" + product.get_product_id())
# Get bulk from cache
retrieved_items = cache.get_cacheitem_bulk(keys)
# Check if any keys have failed to be retrieved
if len(retrieved_items) is len(keys):
for item in retrieved_items:
product = retrieved_items[item].get_value(Product)
# Perform operations according to business logic
else:
# Not all the keys are present in cache
print("Some of the keys were not found")
Ressources additionnelles
NCache fournit un exemple d'application pour les opérations de base sur GitHub.
Voir aussi
.RAPPORTER: Alachisoft.NCache.Client espace de noms.
Java: com.alachisoft.ncache.client espace de noms.
Node.js : Cache classe.
python: ncache.client classe.