解決「當前擴充套件快取策略沒有進行註冊」的錯誤

2022-02-01 15:05:01 字數 2642 閱讀 5864

造成這個錯誤的原因是在使用 senparc.weixin sdk 或者 co2net 的擴充套件快取的時候,沒有對擴充套件快取策略進行註冊(啟用)。解決方案如下:

第一步:先公升級到 senparc.weixin 的最新版本 v5.0.11 以上(依賴 co2net v0.1.11 以上):

第二步:檢查是否加入了一行**:

.net framework:

//

...var isglobaldebug = true;//

設定全域性 debug 狀態

var senparcsetting =senparcsetting.buildfromwebconfig(isglobaldebug);

var register = registerservice.start(senparcsetting).usesenparcglobal();//

co2net全域性註冊,必須!

var isweixindebug = true;//

var senparcweixinsetting =senparcweixinsetting.buildfromwebconfig(isweixindebug);

register.usesenparcweixin(senparcweixinsetting, senparcsetting);

////

...

.net core:

在 startup.cs 中的 configureservices() 和 configure() 中分別加入**(注意 using 兩個命名空間:senparc.co2net 和 senparc.weixin):

public

void

configureservices(iservicecollection services)

只需要上述幾行**即可。 

高階

如果你的系統裡面自己擴充套件了 co2net 的快取策略(非 senparc 官方的 localcontainercachestrategy、rediscontainercachestrategy、memcachedcontainercachestrategy等),那麼上述的 .usesenparcglobal([第乙個引數], [第二個引數]) 的第二個引數需要提供乙個擴充套件的列表,以 .net core為例:

registerservice.start(env /* .net framework 沒有這個引數 */, senparcsetting).usesenparcglobal(false,getexcachestrategies);//

必須

其中,getexcachestrategies方法如下(以 .net core demo 為例,.net framework 下面的 demo 沒有 senparcweixinsetting 引數):

///

///獲取擴充套件快取策略

/// ///

private ilistgetexcachestrategies(senparcweixinsetting senparcweixinsetting)

//判斷memcached是否可用

var memcachedconfiguration =senparcweixinsetting.cache_memcached_configuration;

if ((!string.isnullorempty(memcachedconfiguration) && memcachedconfiguration != "

memcached配置"))

#endregion

//擴充套件自定義的快取策略

return

excontainercachestrategies;

}

注意:上述**以 senparc.weixin sdk 的擴充套件快取實現為例(用於 container 的 redis 和 memecahed)實際上這兩個擴充套件快取再加上 localcontainercachestrategy 已經在執行 register.usesenparcweixin() 的時候自動註冊,無需多此一舉。

當然,這樣有時候還是會稍顯麻煩,所以我們又提供了乙個自動掃瞄所有的擴充套件快取並註冊的方法,完全由系統自動完成:

registerservice.start(senparcsetting).usesenparcglobal(true,null);//必須

注意:當地乙個引數為 true 時,雖然省去了指定快取的**,但是全域性的掃瞄需要消耗一定的時間,會導致系統啟動時間增加。粗略地測試,每個程式集(可近似理解為dll)會延長8毫秒左右的啟動時間。

ps:

senparc.weixin 預設提供了三種 container 的擴充套件快取策略:

您也可以編寫自己的擴充套件快取策略。

APC擴充套件快取實現

發個php快取實現,實現了apc和檔案快取,繼承cache abstract即可實現呼叫第三方的快取工具。參考shindig的快取類和apc。php class cacheexception extends exception 快取抽象類 abstract class cache abstract ...

Redis 擴充套件 快取雪崩和快取穿透問題解決方案

快取同一時間大面積失效,所以,後面的請求都會落到資料庫上,造成資料庫短時間內承受大量的請求而崩掉。解決辦法 快取雪崩解決方案 一般是故意請求快取中不存在的資料,導致所有的請求都落到資料庫上,造成資料庫短時間內承受大量的請求而崩掉。解決辦法 只要用到快取,就可能會涉及到快取與資料庫雙儲存雙寫,只要是雙...

快取問題及相關解決策略

2.1 什麼是快取穿透 正常情況下,我們去查詢資料都是存在。那麼請求去查詢一條壓根兒資料庫中根本就不存在的資料,也就是快取和資料庫都查詢不到這條資料,但是請求每次都會打到資料庫上面去。這種查詢不存在資料的現象我們稱為快取穿透。2.2 穿透帶來的問題 試想一下,如果有黑客會對你的系統進行攻擊,拿乙個不...