mdm-cache-config.properties 參數

快取內容檔包含 Product Master的快取記憶體參數。

mdm-cache-config.properties 參數定義 Product Master的快取內容。 maxElementsInMemory 的所有設定都是指每個 JVM 實例在記憶體中快取的物件類型數目上限。

修改物件快取的設定時,管理者必須徹底檢查可能受影響之服務的 JVM 記憶體設定,以確保它們已適當設定。 檢查 JVM 記憶體的相關性很重要,因為物件快取的大小通常與所需的記憶體數量成比例。 如果您超出具有過大快取的可用記憶體,則效能會嚴重降低。 不過,同樣地,由於 CPU 和磁碟使用率過高,快取大小不足會導致效能不佳。

您可以在使用者介面中檢查快取命中百分比 (位於系統管理者 > 效能資訊 > 快取下的窗格) ,來決定您需要的物件快取大小。 在下拉功能表中選取適當的物件,以檢視其快取資訊。 顯示的百分比是根據使用情形來計算。 在參照快取命中百分比之前,您必須提供系統合理的時間。 只有在系統已在正常正式作業負載下長時間執行之後,計算的百分比才會類似實際結果。

附註: 重設快取大小時,您必須重新啟動伺服器,變更才會生效。

Product Master 內建快取

Product Master 提供物件類型清單的內建快取。 請務必瞭解快取的範圍,這會影響伺服器上的生命期限和記憶體耗用量。 如果在 應用程式環境定義中維護快取,則它對伺服器實例 (每一個 Product Master 服務) 是廣域的; 如果快取包含在 使用者階段作業內,則它在一個階段作業中特定於一個使用者,並且具有不同使用者階段作業的快取物件副本。

應用程式環境定義 中的整個快取記憶體會保留一個副本,因此會使用較少的記憶體,但在服務關閉之前,整個服務程序都有生命期限。 另一方面, 使用者階段作業 中的快取會為每一個使用者階段作業保留一個副本,因此可以為許多使用者階段作業使用更多記憶體。 使用者階段作業中快取的有效期限具有階段作業的有效期限,例如,當使用者登出時,階段作業終止並釋放使用者階段作業快取。

廣域快取或使用者階段作業快取中的特定快取物件仍會觀察物件計數限制及逾時限制的規則,當觸發任一限制時,會從快取儲存器中要求移除部分快取物件,並收回對應的記憶體。

引進分散式快取 (ehcache) 之後,大部分物件都會廣域快取。 多個服務處理程序可以存取快取物件的相同副本,這可解決快取停滯的潛在問題。 此加強功能可透過移除 使用者階段作業 型快取,更好地使用記憶體; 此外,即使關閉一個服務處理程序,快取的物件也可以存活。

為了判斷每一個快取物件類型的有效性, Product Master 使用者介面會顯示快取物件的數目,以及快取命中數和快取遺失數。 可以分析此資訊,以判定針對實作及使用者實務範例是否適當地執行快取設定。

解決方案層次快取

Product Master 內建快取通常是物件的定義類型。 如果在特定實務範例中經常存取部分物件,但該物件類型沒有內建快取功能,則解決方案層次快取可能會有幫助。 典型範例是種類或階層快取。
function getCategoryFromCache(hmCategoryCache, hierarchy, sCategoryPK) {
	if (!hmCategoryCache.containsKey(sCategoryPK)) {
		hmCategoryCache[sCategoryPK] = hierarchy.getEntryByPrimaryKey(sCategoryPK);
	}
	return hmCategoryCache[sCategoryPK];
}

var hmCategoryCache = [];
var hierarchy = getCategoryTreeByName(“My Hierarchy Name”);

// ...

// Any time you want to retrieve a category (i.e. within a loop where you are
// processing an item import), use this instead...
var category = getCategoryFromCache(hmCategoryCache, hierarchy, sCategoryPK);
item.mapCtgItemToCategory(category); // (for example)