缓存驱逐
对于每个缓存,应提前估计缓存大小,并仔细考虑应用程序的数据使用情况。但是,您的缓存有存储限制,如果数据永远驻留在缓存中,它最终会变满。为了处理这个问题, NCache可以利用 的缓存驱逐功能。
在 Eviction 中,当您的缓存已满时, NCache 决定根据使用情况或优先级驱逐其现有数据,以容纳新的传入数据。逐出将平滑缓存操作,同时通过删除配置的数据百分比来限制缓存大小。
NCache 提供不同的驱逐政策。这些策略决定当缓存已满时哪些数据将被逐出:
基于优先级的缓存驱逐
备注
此功能也可用于 NCache Professional.
此缓存逐出策略让缓存首先逐出不太重要的数据。如果您可以将缓存数据分类为不同的优先级,则此驱逐策略是您显而易见的选择。将缓存项添加到缓存时指定优先级。您可以指定以下 6 个优先级中的任意优先级:
- 低
- 低于正常值
- 正常
- 偏多
- 高
- 不可移除 - 此优先级指定缓存项不应被逐出,并且只能使用 NCache API。
最近最少使用 (LRU)
此驱逐策略允许缓存驱逐不再使用的数据。数据根据其上次访问时间被逐出。与最近访问的数据相比,很久以前访问的数据是最适合逐出的候选数据。当从缓存中获取/更新数据时,访问时间会更新。
最不常用 (LFU)
此驱逐策略允许缓存驱逐不经常使用的数据。数据根据其使用频率被逐出。例如,如果某个项目被访问 5 次,那么它比被访问 20 次的项目更适合逐出。
不要驱逐
备注
此功能仅在 NCache Enterprise.
除了不同的政策之外,还有另一种关闭驱逐的选项。在这种情况下,当缓存已满时,缓存不会逐出任何数据,同时拒绝所有传入的数据添加请求。
驱逐率
您还可以指定逐出比率,即数据应从缓存中逐出的百分比。一旦触发驱逐,驱逐只会从缓存中删除配置的数据百分比。
缓存即将满警告
当缓存大约已满 80% 并需要驱逐时, NCache 将事件记录到 Windows 中的事件查看器和缓存日志文件中。
批量删除数据
逐出期间要删除的缓存项的数量可能会很大,具体取决于缓存大小和逐出率。这就是驱逐会批量删除数据的原因。批量操作的大小可以通过缓存服务器配置文件进行配置 NCache 安装如下:
- 。NET: Alachisoft.NCache.Service.exe.config 位于 %NCHOME%/bin/服务
- .NET Core Windows: Alachisoft.NCache.Service.dll.config 位于 %NCHOME%/bin/服务
- .NET Core Linux: Alachisoft.NCache.Daemon.dll.config 位于 /选择/ncache/bin/服务
- Java视窗: Alachisoft.NCache.Service.dll.config 位于 %NCHOME%/bin/服务
- 爪哇 Linux: Alachisoft.NCache.Daemon.dll.config 位于 /选择/ncache/bin/服务
同样,您还可以借助服务配置文件配置两个批量删除操作之间的延迟。
集群环境中的驱逐
在 分区的 和 分区副本 拓扑中,数据分布基于哈希算法。每个节点都有划分的数据,因此每个节点负责驱逐其数据。但是,Partition-Replica 中的副本节点本身不会逐出数据 - 当从活动节点中删除数据时,数据会自动从副本中删除。
在 已复制 拓扑,每个节点都有相同的数据集,所以只有集群协调器负责驱逐。
在 镜子 缓存只有两个节点,一个是主动的,另一个是被动的。因此,活动节点负责对整个缓存进行驱逐。