Apex開發指南--利用緩存去避免governor limit

學習目的
1,利用靜態變量做緩存避免governor limit

governor limit

salesforce是一個多租戶的雲平臺,爲了是每個租戶能夠歐公平的使用公共資源,所以平臺就多壟斷資源的行爲做了很多限制。比如查詢次數限制,dml操作次數限制,callout限制,future限制等等。那麼在實際的開發過程,我們往往存在業務邏輯可能會觸碰到這些限制。今天分享一個使用靜態變量做緩存避免限制。

靜態變量

在定義靜態變量上,使用static關鍵字。
不管是在全局還是局部聲明的static變量都存放於程序的全局變量區域,所以它的生命週期是從程序開始到程序結束。但是static變量的作用域並不等同於它的生存週期,它的作用域決定於它被定義的位置。可以認爲static變量的作用域<=生存週期。
初始化,在程序初始化的時候,static定義的變量就會初始化一次,並且在整個程序週期,只會初始化一次。

利用靜態變量做緩存

在寫apex類或者trigger的時候,我們經常會去查詢數據,在一個事務裏面查詢次數是100。有時候一些數據可能我們在每個方法裏面都要使用,那麼我們是查詢一次出來,然後供多個地方使用,還是每次要使用的時候去查詢呢?這個很明顯,肯定是一次查詢,多處使用。以下有一個例子:
在User對象上有一個字段UserIsSpecial__c。如果每次要使用這個字段就去查一次數據庫,那麼就會過多的增加查詢次數。我們可以寫一個公共的方法來做緩存。

緩存

緩存:簡單理解就是爲了使代碼和持久層交互減少,減少吃就成的壓力。比如A要去查一個用戶的信息,那麼先去緩存裏面查,如果有就不去數據庫裏查了,沒有再去數據庫查詢。關於緩存,是一個很重要的內容。可以在網上找相關資料學習,例如:如何設置緩存機制,緩存擊穿,緩存溢出等

在這裏插入圖片描述
如果代碼就想上面,每個地方需要,每個地方調用。那麼很可能出現查詢次數過多的異常。
在這裏插入圖片描述
把IsUserSpecialChecked作爲緩存標識,如果爲true,表示緩存裏面包含了該值,不需要再執行查詢操作,直接返回當前靜態變量UserIsSpecial裏面的值。
把這個方法封裝好以後,在任何要使用的地方去使用**類名.方法名()**就可以使用了。

在這裏插入圖片描述
這張圖裏的代碼是一個樣例,就是獲取當前用戶所在的時區,這個在很多地方都會用到。就比如針對每一個用戶,而用戶所在時區不一樣,我們需要展示的數據要根據當前時區進行每日更新。那麼我們就會使用到時區。而獲取時區,是一個頻繁的操作,所以可以利用到緩存的思想。

靜態變量做緩存的好處和壞處

好處:能夠減少查詢次數,避免,meet limit
壞處:因爲每個靜態變量都是存儲在heap裏面,而salesforce對heap也有limit,所以在當要緩存大量數據的時候還是會觸碰限制。
總體來說,當我們在使用數據量小,而且頻繁的場景下,使用靜態變量做緩存能夠很好的避免觸碰限制。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章