[NewLife.XCode]數據層緩存(網站性能翻10倍)

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版]

  1. 增刪改查入門。快速展現用法,代碼配置連接字符串
  2. 數據模型文件。建立表格字段和索引,名字以及數據類型規範,推薦字段(時間,用戶,IP)
  3. 實體類詳解。數據類業務類,泛型基類,接口
  4. 功能設置。連接字符串,調試開關,SQL日誌,慢日誌,參數化,執行超時。代碼與配置文件設置,連接字符串局部設置
  5. 反向工程。自動建立數據庫數據表
  6. 數據初始化。InitData寫入初始化數據
  7. 高級增刪改。重載攔截,自增字段,Valid驗證,實體模型(時間,用戶,IP)
  8. 髒數據。如何產生,怎麼利用
  9. 增量累加。高併發統計
  10. 事務處理。單表和多表,不同連接,多種寫法
  11. 擴展屬性。多表關聯,Map映射
  12. 高級查詢。複雜條件,分頁,自定義擴展FieldItem,查總記錄數,查彙總統計
  13. 數據層緩存。Sql緩存,更新機制
  14. 實體緩存。全表整理緩存,更新機制
  15. 對象緩存。字典緩存,適用用戶等數據較多場景。
  16. 百億級性能。字段精煉,索引完備,合理查詢,充分利用緩存
  17. 實體工廠。元數據,通用處理程序
  18. 角色權限。Membership
  19. 導入導出。Xml,Json,二進制,網絡或文件
  20. 分表分庫。常見拆分邏輯
  21. 高級統計。聚合統計,分組統計
  22. 批量寫入。批量插入,批量Upsert,異步保存
  23. 實體隊列。寫入級緩存,提升性能。
  24. 備份同步。備份數據,恢復數據,同步數據
  25. 數據服務。提供RPC接口服務,遠程執行查詢,例如SQLite網絡版
  26. 大數據分析。ETL抽取,調度計算處理,結果持久化

 

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