原文:Solr4.7緩存技術
磁盤IO往往是計算機系統響應速度的一個突出瓶頸,搜索引擎查詢很平凡,減少搜索過程中的磁盤IO對提升搜索響應速度無疑有莫大的幫助,在solr中,提供自帶的緩存機制。我們只需要在solrconfig.xml中加幾個配置項就可以了。
下面我們看看solr的3個緩存。
Filter cache:這個是被用來緩存過濾器(就是查詢參數fq)的結果和基本的枚舉類型。
Document cache:這個是被用來緩存lucene documents的,就是存儲field的那個東西。
Query result cache:這個一目瞭然,把查詢結果緩存起來。
一、緩存配置
Solr的緩存配置在solrconfig.xml文件的查詢配置部分,也就是<query>和</query>標籤之間。Solr實現了2種緩存機制,分別是LRUCache、FastLRUCache;
LRUCache:基於線程安全的LinkedHashMap實現。
FastLRUCache:基於ConcurrentHashMap實現。
單線程的情況下FastLRUCache具有更快的gets操作和比較慢的puts操作,因此使用它的查詢命中率會高出LRUCache 75%,當然在多線程的情況下差距可能更大。
參數說明:
Class:指定使用solr的哪種緩存機制。
Size:允許分配多少個實體(entity)的緩存空間。
initialSize:分配初始多少個實體(entity)的緩存空間。
autowarmCount:自動預裝入實體數。
1、 Filter cache
<filterCache
class="solr.FastLRUCache"
size="200"
initialSize="200"
autowarmCount="100"/>
2、Documentcache<queryResultCache
class="solr.FastLRUCache"
size="500"
initialSize="500"
autowarmCount="250"/>
3、Queryresult cache <documentCache
class="solr.FastLRUCache"
size="11000"
initialSize="11000" />
4、查詢結果窗口值設置
查詢結果窗口值是和Query result cache配合使用的。這個值是個什麼概念呢,就是我設置查詢結果窗口值爲50,我查詢20到30條的數據,第一次查詢的時候solr會從索引庫中取出0到49條的數據,我翻頁的時候就不用再到索引庫裏面去查詢了,直接從緩存裏面取就可以了,大大的提高了查詢響應速度。
<queryResultWindowSize>50</queryResultWindowSize>
二、完整配置<!--緩存配置-->
<query>
<!--過濾器cache-->
<filterCache
class="solr.FastLRUCache"
size="200"
initialSize="200"
autowarmCount="100"/>
<!--查詢結果cache-->
<queryResultCache
class="solr.FastLRUCache"
size="500"
initialSize="500"
autowarmCount="250"/>
<!--文檔cache-->
<documentCache
class="solr.FastLRUCache"
size="11000"
initialSize="11000" />
<queryResultWindowSize>200</queryResultWindowSize>
</query>