假設我們正在建立一個電子商務網站,允許消費者通過輸入關鍵字搜索產品。假設最多有20萬種產品,而且有數百萬的消費者正在使用該系統。假設產品表更新頻率相當高。由於產品數量不是很多,我們可能會將整個產品表存儲在內存中,並根據它進行搜索而不是擊中數據庫。我們希望創建分佈式緩存,它們存儲相同的數據,但駐留在不同的服務器中(爲了實現高可用性和性能),我們需要能夠在這些緩存之間同步數據,並在產品表被修改時使緩存無效。關於在高流量網站緩存的問題
我們的應用程序是使用ASP.NET MVC和NHibernate構建的。我想了解NHibernate的2級緩存是否有助於我的情況。如果你們能夠闡明這一點,我將非常感激。
據我所知,2級高速緩存將有助於緩存查詢結果,所以如果兩個不同的用戶使用相同的關鍵字搜索,L2高速緩存會從緩存中,而不是從數據庫服務的結果。但它對我們沒有多大幫助,因爲產品表經常更新並且緩存的結果將陳舊。 我的問題是我正確理解L2緩存,是否存在任何有助於管理緩存的方式(我想要的方式是多個緩存,相同的數據,緩存和無效緩存之間的同步)。任何想法,高度讚賞。
感謝這個有用的信息,捷豹!我一直在研究NHibernate.Search和Lucene.NET,但除了Oren Eini博客上的資源外,還找不到很多資源。如果你知道其他有用的鏈接,我會非常感激,如果你可以傳遞它。我想知道的另一個問題是,在更新緩存或數據庫時,Lucene.NET索引的文檔如何與緩存或數據庫同步?從你的帖子看來,它好像是二級緩存和NHibernate.Search/Locene.NET好像一起工作得很好? – mwong 2010-02-16 14:37:54
嗯,我已經閱讀了部分Hibernate Search的實際操作(http://www.manning.com/bernard/),除了用法上的配置差異大多相同。此外,我強烈建議Lucene在Action(http://www.manning.com/hatcher2/)上更強有力地討論Lucene是什麼以及它是如何做到的。 至於第二個問題,請記住緩存始終是數據庫的表示。 lucene索引與db條目同步,是的,它們工作正常 – Jaguar 2010-02-16 17:42:21