一.简介
Solr提供了一系列的内置缓存来优化查询性能。Solr的缓存原理主要涉及以下4个方面:
1.缓存大小及缓存置换法
从缓存大小的角度来看,不能将缓存设置的太大,否则它会消耗JVM大量的内存。Solr能将所有的缓存对象都保存到内存中,不会溢写到磁盘中。为了控制缓存大小,Solr要求为每一个缓存都设置一个缓存对象的数量上限。当达到上限时,Solr将会采用最久未使用【Least Recently Used, LRU】置换法或最近最少使用【Least Frequently Used, LFU】置换法回收一部分缓存空间。
最久未使用置换法在缓存大小达到阈值上限时,根据缓存对象最后一次被请求的时间来决定缓存对象被回收的次序。当缓存区达到上限,需要添加新的对象时,LRU置换法将置换缓存中最久未被使用的对象。LRU置换法是Solr的默认缓存置换算法。同时,Solr还提供了最近最少使用置换法LFU,该方法根据缓存对象被请求频率的高低决定缓存对象被回收的次序。这种置换法给与缓存中使用频率高的对象更高的优先级,而不是最近被请求的对象。Solr的过滤器缓存使用的是LFU置换法。因为过滤查询的创建和存储都是很耗费资源的,所以需要尽量降低过滤器缓存的存储大小,并且给予应用中频繁使用的过滤器更高的优先级。
在缓存大小这有一个常见的误区,就是内存空间越大,缓存就设置的越大。这样做存在的问题是,一旦某个缓存在一次提交操作之后失效了,JVM就需要做大量的垃圾回收工作。且关闭一个搜索器会使得该搜索器缓存的所有对象都失效。如果没有根据垃圾回收的实际情况对缓存大小进行合适的调整,就可能导致服务器因垃圾回收时间过长而导致长时间停止服务。因此,现阶段最重要的是避免定义过大的缓冲区,并且要对缓存对象进行周期性回收。
2.缓存命中率与缓存回收
缓存命中率是指应用程序的缓存命中的用户请求数量占所有用户请求数量的比例。缓存命中率表明了缓存对应用程序的性能优化所起到的作用。理想情况下,希望缓存命中率尽量接近1【100%】,低缓存命中率表明缓存对Solr的性能优化没有起到多大作用。
缓存回收数表明有多少缓存对象被缓存置换法回收了。如果回收量很大,则表明应用程序的缓存对象的最大值可能设置的太小。缓存回收数和缓存命中率是紧密相关的,低的缓存回收数往往代表一个较好的缓存命中率。
3.缓存对象失效
4.自动预热新缓存
原文地址:https://www.cnblogs.com/yszd/p/11779827.html