NewLife.XCode是一個有10多年曆史的開源數據中間件,支持nfx/netcore,由新生命團隊(2002~2019)開發完成並維護至今,以下簡稱XCode。
整個系列教程會大量結合示例代碼和運行日誌來進行深入分析,蘊含多年開發經驗於其中,代表作有百億級大數據實時計算項目。
開源地址:https://github.com/NewLifeX/X (求star, 760+)
緩存是一把尖刀,合理使用可大大提升吞吐率!
歷史背景
2006年,某某省電網門戶卒!
經查,首頁某個sql先後執行了8次,正好對應頁面上8大塊新聞列表。
實在忍無可忍,於是在底層用Hashtable做了一層sql/DataSet緩存,當時.NET1.1好像還沒有泛型字典。
於是世界清靜了,效果還不錯,特別對於訪問量很大的門戶網站。
XCode的數據層緩存設計於2003年,那時候只做網站和普通MIS系統,數據庫性能還很差……
數據層緩存:以查詢sql爲key,把查詢結果緩存起來,提升系統性能!
數據層緩存
經過16年的發展,XCode裏面數據層緩存曾經一度被幹掉,若干年後又請回來,現在是這個樣子:
數據層DAL內,所有查詢類方法 Query/Select/SelectCount 都先走一趟緩存(默認配置關閉);
所有添刪改操作類方法 Execute 都清空本DAL連接的所有緩存;
** 多年前,查詢方法指定要用到的表名,添刪改方法指定會影響到的表名,做到部分表緩存過期。現在數據庫性能大有提升,爲了“簡約”設計理念,簡化了緩存設計。
緩存設置
數據層緩存只有一個緩存時間的設置DataCacheExpire,位於配置文件 config/xcode.config 中,默認0秒錶示不啓用。
設置緩存時間的方式有多種:
- 修改配置文件 config/xcode.config 中的DataCacheExpire
- 魔方,魔方設置頁面,修改數據中間件頁的“數據層緩存”
- 直接修改DAL類的Expire屬性
- 連接字符串中配置DataCache參數,如 DataCache=60
前面兩者的本質相同,也是最常見用法。
連接字符串配置提供了個性化,針對部分連接需要打開數據層緩存,或者不同連接採用不能緩存時間的場景。
總結
2016年起,XCode採取了“簡約”且稍微“保守”的理念,於是數據層緩存默認配置0秒,大部分場景推薦使用10~60秒。
各種網站,推薦過期時間60秒起,經實際線上項目壓測,吞吐率可輕易從300rps提升到10000rps以上,命中率99.99%。
每一個應用系統,總會有那麼一些表或數據很少改變,非常適合使用數據層緩存,建議在實踐中獲得最優緩存時間!
系列教程
NewLife.XCode教程系列[2019版]
- 增刪改查入門。快速展現用法,代碼配置連接字符串
- 數據模型文件。建立表格字段和索引,名字以及數據類型規範,推薦字段(時間,用戶,IP)
- 實體類詳解。數據類業務類,泛型基類,接口
- 功能設置。連接字符串,調試開關,SQL日誌,慢日誌,參數化,執行超時。代碼與配置文件設置,連接字符串局部設置
- 反向工程。自動建立數據庫數據表
- 數據初始化。InitData寫入初始化數據
- 高級增刪改。重載攔截,自增字段,Valid驗證,實體模型(時間,用戶,IP)
- 髒數據。如何產生,怎麼利用
- 增量累加。高併發統計
- 事務處理。單表和多表,不同連接,多種寫法
- 擴展屬性。多表關聯,Map映射
- 高級查詢。複雜條件,分頁,自定義擴展FieldItem,查總記錄數,查彙總統計
- 數據層緩存。Sql緩存,更新機制
- 實體緩存。全表整理緩存,更新機制
- 對象緩存。字典緩存,適用用戶等數據較多場景。
- 百億級性能。字段精煉,索引完備,合理查詢,充分利用緩存
- 實體工廠。元數據,通用處理程序
- 角色權限。Membership
- 導入導出。Xml,Json,二進制,網絡或文件
- 分表分庫。常見拆分邏輯
- 高級統計。聚合統計,分組統計
- 批量寫入。批量插入,批量Upsert,異步保存
- 實體隊列。寫入級緩存,提升性能。
- 備份同步。備份數據,恢復數據,同步數據
- 數據服務。提供RPC接口服務,遠程執行查詢,例如SQLite網絡版
- 大數據分析。ETL抽取,調度計算處理,結果持久化