# 緩存
xorm內置了一致性緩存支持,不過默認并沒有開啟。要開啟緩存,需要在engine創建完后進行配置,如: 啟用一個全局的內存緩存
~~~
cacher := xorm.NewLRUCacher(xorm.NewMemoryStore(), 1000)
engine.SetDefaultCacher(cacher)
~~~
上述代碼采用了LRU算法的一個緩存,緩存方式是存放到內存中,緩存struct的記錄數為1000條,緩存針對的范圍是所有具有主鍵的表,沒有主鍵的表中的數據將不會被緩存。 如果只想針對部分表,則:
~~~
cacher := xorm.NewLRUCacher(xorm.NewMemoryStore(), 1000)
engine.MapCacher(&user, cacher)
~~~
如果要禁用某個表的緩存,則:
~~~
engine.MapCacher(&user, nil)
~~~
設置完之后,其它代碼基本上就不需要改動了,緩存系統已經在后臺運行。
當前實現了內存存儲的CacheStore接口MemoryStore,如果需要采用其它設備存儲,可以實現CacheStore接口。
1. 不過需要特別注意不適用緩存或者需要手動編碼的地方:
2. 當使用了Distinct,Having,GroupBy方法將不會使用緩存
3. 在Get或者Find時使用了Cols,Omit方法,則在開啟緩存后此方法無效,系統仍舊會取出這個表中的所有字段。
由于存在ORM和RAW兩種方式操作數據庫,故在使用Exec方法執行了方法之后(RAW方式),可能會導致緩存與數據庫不一致的地方。因此如果啟用緩存,盡量避免使用類Exec的方法。如果必須使用,則需要在使用了Exec之后調用ClearCache手動做緩存清除的工作,或則在您在您的系統內部自行實現系統級的緩存。比如:
~~~
engine.Exec("update user set name = ? where id = ?", "xlw", 1)
engine.ClearCache(new(User))
~~~
- xorm
- 創建Orm引擎
- 定義表結構體
- 名稱映射規則
- 前綴映射,后綴映射和緩存映射
- 使用Table和Tag改變名稱映射
- Column屬性定義
- 表結構操作
- 獲取數據庫信息
- 表操作
- 創建索引和唯一索引
- 同步數據庫結構
- 導入導出SQL腳本
- SqlMap及SqlTemplate模板
- 初始化SqlMap配置文件及SqlTemplate模板
- SqlMap及SqlTemplate相關功能API
- SqlMap配置文件及SqlTemplate模板加密存儲及解析
- 手動管理SqlMap配置及SqlTemplate模板
- 插入數據
- ORM方式插入數據
- 執行SQL命令插入數據
- 創建時間Created
- 查詢和統計數據
- ORM方式查詢和統計數據
- 查詢條件方法
- 臨時開關方法
- Get方法
- Find方法
- Join的使用
- Iterate方法
- Count方法
- Rows方法
- Sum系列方法
- Exist方法
- 子查詢
- 執行SQL查詢
- 執行SQL查詢的11種常用方式
- 查詢返回json或xml字符串
- 鏈式查詢據操返回某條記錄的某個字段的值
- SqlTemplateClient執行過程
- 關于數據庫分頁查詢
- 更新數據
- ORM方式更新數據
- Update方法
- 樂觀鎖Version
- 更新時間Updated
- 執行SQL命令更新數據
- 刪除數據
- ORM方式刪除數據
- Delete方法
- 軟刪除Deleted
- 執行SQL命令刪除數據
- 事務處理
- 簡單事務模型
- 嵌套事務模型
- 八種事務類型及事務傳播機制
- 簡單事務相關API
- 嵌套事務相關API
- 嵌套事務示例代碼
- 主從數據庫(Master/Slave)讀寫分離
- 創建引擎組
- 負載策略
- 引擎組其他配置方法
- 數據庫讀寫分離
- 批量混合SQL操作
- SQL Builder
- 緩存
- 事件
- 數據導出
- Dump數據庫結構和數據
- 查詢結果集導出csv、tsv、xml、json、xlsx、yaml、html
- 多Sheet頁數據導出
- 日志
- 連接池
- xorm 工具
- 常見問題
- 感謝支持