天天看點

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

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

governor limit

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

靜态變量

在定義靜态變量上,使用static關鍵字。

不管是在全局還是局部聲明的static變量都存放于程式的全局變量區域,是以它的生命周期是從程式開始到程式結束。但是static變量的作用域并不等同于它的生存周期,它的作用域決定于它被定義的位置。可以認為static變量的作用域<=生存周期。

初始化,在程式初始化的時候,static定義的變量就會初始化一次,并且在整個程式周期,隻會初始化一次。

利用靜态變量做緩存

在寫apex類或者trigger的時候,我們經常會去查詢資料,在一個事務裡面查詢次數是100。有時候一些資料可能我們在每個方法裡面都要使用,那麼我們是查詢一次出來,然後供多個地方使用,還是每次要使用的時候去查詢呢?這個很明顯,肯定是一次查詢,多處使用。以下有一個例子:

在User對象上有一個字段UserIsSpecial__c。如果每次要使用這個字段就去查一次資料庫,那麼就會過多的增加查詢次數。我們可以寫一個公共的方法來做緩存。

緩存

緩存:簡單了解就是為了使代碼和持久層互動減少,減少吃就成的壓力。比如A要去查一個使用者的資訊,那麼先去緩存裡面查,如果有就不去資料庫裡查了,沒有再去資料庫查詢。關于緩存,是一個很重要的内容。可以在網上找相關資料學習,例如:如何設定緩存機制,緩存擊穿,緩存溢出等

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

如果代碼就想上面,每個地方需要,每個地方調用。那麼很可能出現查詢次數過多的異常。

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

把IsUserSpecialChecked作為緩存辨別,如果為true,表示緩存裡面包含了該值,不需要再執行查詢操作,直接傳回目前靜态變量UserIsSpecial裡面的值。

把這個方法封裝好以後,在任何要使用的地方去使用**類名.方法名()**就可以使用了。

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

這張圖裡的代碼是一個樣例,就是擷取目前使用者所在的時區,這個在很多地方都會用到。就比如針對每一個使用者,而使用者所在時區不一樣,我們需要展示的資料要根據目前時區進行每日更新。那麼我們就會使用到時區。而擷取時區,是一個頻繁的操作,是以可以利用到緩存的思想。

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

好處:能夠減少查詢次數,避免,meet limit

壞處:因為每個靜态變量都是存儲在heap裡面,而salesforce對heap也有limit,是以在當要緩存大量資料的時候還是會觸碰限制。

總體來說,當我們在使用資料量小,而且頻繁的場景下,使用靜态變量做緩存能夠很好的避免觸碰限制。

繼續閱讀