• Webinars
  • Docs
  • Download
  • Blogs
  • Contact Us
Show / Hide Table of Contents
  • Programmer's Guide
  • Client Side API Programming
    • Setting Up Development Environment
    • Basic Cache Operations
      • Initialize Cache
      • Add Data to Cache
      • Update Data in Cache
      • Fetch Data From Cache
      • Remove Data From Cache
      • Dispose Cache
    • Bulk Operations
      • Adding Collection to Cache
      • Updating Collection in Cache
      • Retrieving Collection from Cache
      • Removing Collection from Cache
      • Deleting Collection from Cache
    • Asynchronous Operations
      • Using Asynchronous Operations
      • Using Asynchronous Operations with Callback Methods
    • Groups and Subgroups
      • Adding/Updating Data Group in Cache
      • Retrieving Data Group from Cache
      • Removing Data Group from Cache
    • Tagging Data in NCache
      • Creating Tags
      • Adding Items with Tags
      • Retrieving Previously Tagged Data
      • Removing Tagged Items from Cache
    • Named Tags
    • Data Expiration Strategies
      • Using Absolute Expiration
      • Using Sliding Expiration
    • Cache Dependencies
      • Key Dependency
      • File Dependency
      • Notification based Dependencies
        • Database Dependency using SQL Server
        • Database Dependency using Oracle
      • Polling Based Dependency
      • Custom Data Source Dependency
      • Multiple Cache Sync Dependency
      • Aggregate Dependency
      • Add Dependency to Existing Item
      • Using CLR Procedures to Call NCache
    • Locking Data in NCache
      • Locking Items in Cache (Pessimistic Locking)
      • Locking Items with Cache Item Versioning (Optimistic Locking)
    • SQL Reference for NCache
      • SQL Syntax
      • Querying Samples for Operators
      • Querying Data in NCache
      • NCache Language Integrated Query (LINQ)
        • Using LINQ in NCache
        • Configuring LINQPad for NCache
        • Querying NCache Data in LINQPad
    • Event Notifications
      • Cache Level Event Notifications
      • Item Level Event Notifications
      • Custom Event Notifications
    • Publish/Subscribe (Pub/Sub) in NCache
      • Pub/Sub Topics
      • Managing Topics
      • Pub/Sub Messages
        • Message Behavior and Properties
        • Creating a Message
      • Publish Messages to Topic
      • Subscribe for Topic Messages
      • Monitoring Pub/Sub Topics
    • Continuous Query
    • Using Streams in NCache
      • Opening with Stream Modes
      • Adding and Updating Data with Streams
      • Retrieving Data from Streams
      • Closing a Stream
    • Security and Encryption
      • NCache Security
      • NCache Data Encryption
    • Data Compression
    • NCache Management API
  • Server Side API Programming
    • Cache Startup Loader
      • Components of Cache Startup Loader
      • Sample Implementation of ICacheLoader on Single Node
      • Sample Implementation of ICacheLoader with Distribution Hints
    • Data Source Providers (Backing Source)
      • Read-Through Caching
        • Configure Read-Through Provider
        • Using Read-Through with Cache Operations
      • Write-Through Caching
        • Configuring Write-Through Provider
        • Using Write-Through with Basic Operations
        • Using Write-Behind with Basic Operations
        • Using Write-Behind with Bulk Operations
        • Using Write-Behind with Async Operations
        • Monitor Write-Through Counters
    • Custom Dependency
      • Sample Implementation of Custom Dependency
      • Sample Usage of Custom Dependency
    • WAN Replication through Bridge
      • Bridge Configurations
      • Implementing Bridge Conflict Resolver
    • Entry Processor
      • Sample Implementation of IEntryProcessor Interface
      • Sample Usage of EntryProcessor
    • MapReduce
      • Sample Implementation of MapReduce Interfaces
      • Sample Usage of MapReduce
    • Aggregator
      • Sample Implementation of IValueExtractor Interface
      • Sample Implementation of IAggregator Interface
      • Sample Usage of Aggregator
    • Dynamic Compact Serialization
  • Client Side ASP.NET Features
    • ASP.NET
      • ASP.NET Session State Provider for NCache
      • Multi-Region ASP.NET Session State Provider for NCache
    • ASP.NET Core
      • Session Storage in ASP.NET Core
        • Configure NCache ASP.NET Core Session Provider
        • Configure ASP.NET Core Sessions with NCache IDistributedCache Provider
      • Multi-Region ASP.NET Core Session Provider for NCache
      • Object Caching in ASP.NET Core
    • ASP.NET SignalR
      • Using NCache Extension for SignalR
    • View State Caching
      • Configuring and Using Content Optimization
      • Group View State with Sessions
      • Limit View State Caching
      • Perform Page Level Grouping for View State
    • ASP.NET Output Cache
      • Configure ASP.NET Output Caching
      • Using ASP.NET Output Cache with Custom Hooks
  • Client Side Third Party Integrations
    • Migrating AppFabric to NCache
      • AppFabric API vs. NCache API
    • NHibernate
      • NCache as NHibernate Second Level Cache
      • Using NHibernate Query Caching
      • Configuring Database Synchronization with NHibernate
    • Entity Framework Caching Integration
      • NCache as Entity Framework Second Level Cache
      • Entity Framework Caching Config File
    • Entity Framework Core Caching
      • Installing NCache Entity Framework Core Provider
      • Configuring NCache Entity Framework Core Provider
      • Using NCache Entity Framework Core Provider
        • Caching Options for EF Core Provider
        • LINQ APIs for EF Core Provider
        • Cache Only APIs for EF Core Provider
        • Query Deferred APIs for EF Core Provider
      • Logging in NCache Entity Framework Core Provider
    • Memcached
      • NCache Memcached Gateway Approach
      • Memcached Client Plugin for .NET
    • Debug NCache Providers in Visual Studio
    • NCache for Visual Studio Extension

Named Tags

You can associate one or more keywords with cache items in NCache. These keywords will act as an identifying mark for cache items. You can retrieve that data later on the basis of specified keywords through "Tags". But if you require a higher level of tagging where your tags can have types or names, and your requirement is to query data related to specific type of tag, then you need “Named Tags”. The “Named Tags" feature set is the enhancement of the "Tags" feature set.

Consider a scenario where user needs to store an object in textual form such as "XML", he will not be able to search that object using tags. The limitation of tags is that it can only have text values and only one attribute i.e. Tag. With named tags user will be able to store additional information (of any type) required to query the object stored as string.

Here users are required to provide the list of named tags, each having two parameters, "key" (name of a tag) as string and "value" (assigned value) as any primitive type. NCache then allows you to search your objects through these named tags.

Creating Named Tags

To utilize the APIs, include the following namespace in your application: Alachisoft.NCache.Web.Caching.

A NamedTagsDictionary is a class provided by NCache so you can associate these tags with a particular data.

NamedTagsDictionary productNamedTag = new NamedTagsDictionary();
productNamedTag.Add("UnitsAvailable", 4);
productNamedTag.Add("Category", 25);
productNamedTag.Add("Supplier", "Alex");

Adding item to cache with Named Tags

In this example, Add Operation overload is used to associate named tags previously created.

Product product = new Product();
product.ProductID = 1001;
product.ProductName = "Chai";
string key = "Product:" + product.ProductID;
try
{
    cache.Add(key, product, productNamedTag);
}
catch (OperationFailedException ex)
{
    // handle exception
}

Adding Named Tags through CacheItem

In the following example named tags are set by assigning them as a property of CacheItem.

CacheItem cacheItem = new CacheItem(product);
cacheItem.NamedTags = productNamedTag;
try
{
    cache.Add(key, cacheItem);
}
catch (OperationFailedException ex)
{
    // handle exception
}

Querying Cache Items with respect to Named Tags

In the following code example please specify the fully qualified name of your custom class instead of 'Product' in the query string.


string query = "SELECT Product WHERE this.Supplier = ?";
Hashtable values = new Hashtable();
values.Add("UnitsInStock", 4);
values.Add("Supplier", "Alex");
try
{
    ICacheReader queryResult = cache.ExecuteReader(query, values, true);
    //queryResult contains all keys related to both tags.
if (queryResult.FieldCount > 0)
{
       while (queryResult.Read())
       {
            //perform operations
       }
    }
    else{
        //no record exists
    }
}
catch (OperationFailedException ex){
    //handle exception
}
Note

If you have multiple applications that are sharing the same cache and all of them are supposed to add named tags, then make sure that same named tags have homogenous data types. E.g. If one client is adding named tag ProductID with String data type then all other clients should add values of ProductID only in String format for same cache.

Troubleshooting

IndexNotDefinedException

In case no Named Tag has been added to a cache and the cache is searched with ExecuteReader for Named Tag values, you get IndexNotDefinedException. If you want that no such exception should be thrown even if you have not added any Named Tag to your cache, NCache now provides a way to disable this exception.

Workaround

You can suppress this exception by following these steps:

  • Go to Alachisoft.NCache.Service.exe.config located at %NCHOME%/bin/service/.

  • Add the following line in the configuration file:

  <add key = "NCacheServer.DisableIndexNotDefinedException" value = "true" />

The value true indicates that no IndexNotDefinedException will be thrown, whereas, the value false means that the exception will be thrown.

  • Restart the NCache service for these changes to take effect.
Back to top Copyright © 2017 Alachisoft