造成這個錯誤的原因是在使用 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):
publicvoid
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 穿透帶來的問題 試想一下,如果有黑客會對你的系統進行攻擊,拿乙個不...