Cache Eviction
For every cache, the cache size should be estimated in advance with careful consideration of data usage by your application. However, your cache has storage limitations and if data will reside in the cache forever, it will eventually become full. To handle this, NCache's Cache Eviction feature can be utilized.
In Eviction, when your cache is full, NCache decides to evict its existing data on the basis of usage or priority to accommodate fresh incoming data. Eviction will smooth cache operations while keeping the cache size limited by removing a configured percentage of data.
NCache provides different policies for Eviction. These policies decide which data will be evicted when the cache is full:
Priority Based Cache Eviction
Note
This feature is also available in NCache Professional.
This Cache Eviction policy lets the cache evict less important data first. This eviction policy is your obvious choice if you can classify the cache data into different priorities. The priority is specified with the cache item while adding it to the cache. You can specify any of the priorities from the following 6 levels of priorities:
- Low
- Below Normal
- Normal
- Above Normal
- High
- Not Removable - This priority level specifies that the cache item should not be evicted and can only be configured using the NCache API.
Least Recently Used (LRU)
This eviction policy lets caches evict data that is no longer in use. Data is evicted based on its last access time. The data that was accessed a long time ago is the most suitable candidate for eviction as compared to the data that has been accessed recently. Access time is updated when data is fetched/updated from the cache.
Least Frequently Used (LFU)
This eviction policy lets cache evict the data which is less frequently used. The data is evicted based on the frequency of its usage. For example, if an item is accessed 5 times, then it is a more suitable candidate for eviction than an item that is accessed 20 times.
Do not Evict
Note
This feature is only available in NCache Enterprise.
Along with different policies, there is another option to turn off eviction. In this case, when the cache gets full, the cache does not evict any data while all incoming data addition requests are rejected.
Eviction Ratio
You can also specify the eviction ratio, i.e., by what percentage the data should be evicted from the cache. Eviction removes only the configured percentage of data from the cache, once eviction is triggered.
Cache Nearly Full Warninbg
When the cache is about 80% full and needs eviction, NCache logs events to both the Event Viewer in Windows and cache log files.
Bulk Removal of Data
The number of cache items to be removed during eviction can be huge depending on cache size and eviction ratio. That is why eviction removes data in bulk. The size of the bulk operation is configurable through the cache server configuration file found in the NCache installation as follows:
- .NET: Alachisoft.NCache.Service.exe.config located in %NCHOME%/bin/service
- .NET Core Windows: Alachisoft.NCache.Service.dll.config located in %NCHOME%/bin/service
- .NET Core Linux: Alachisoft.NCache.Daemon.dll.config located in /opt/ncache/bin/service
- Java Windows: Alachisoft.NCache.Service.dll.config located in %NCHOME%/bin/service
- Java Linux: Alachisoft.NCache.Daemon.dll.config located in /opt/ncache/bin/service
Similarly, you can also configure the delay between two bulk removal operations with the help of a service configuration file.
Eviction in Clustered Environment
In the Partitioned and the Partition-Replica topologies, data distribution is based on a hashing algorithm. Each node has divided data, thus each node is responsible for evicting its data. However, the replica node in Partition-Replica does not evict the data themselves - data is automatically removed from the replica when it is removed from the active node.
In the Replicated topology, every node has the same set of data, so only the cluster coordinator is responsible for eviction.
In the Mirror Cache has only two nodes, one active other passive. Thus, the active node is responsible for carrying out eviction on the entire cache.
See Also
Eviction Policy
Indexing
Class Versioning
Runtime Data Sharing