scut 的快取管理看起來還是蠻複雜的。
redis 本身就有記憶體快取+持久化的作用,scut還是自己封裝了一層記憶體快取+redis快取+持久化。
這是乙個縮略版本的結構圖。
1. 上半部分是通用的快取池結構,用來存放各類快取資料。
第一層dictionary是按大類區分:entity_、personal_(0),type.name 等;
第二層dictionary則是進一步細分,比如同樣乙個type下的 type.name +"userid";
2. 下半部分則是應用層對快取的操作器,包含資料取用+操作方法,應用層資料結構要按照一定的規則進行封裝,才能直接使用scut提供的「帶資料修改事件」的各類元件。
cacheitemset 的作用:
cache 們都會用cacheitemset 容器來裝載具體的資料;
private readonly cachetype _cacheitemtype; //標記了快取的型別,不同型別的快取在從redis載入時key的組裝方式,釋放快取的規則都不相同生命週期如何起作用?haschanged 如何起作用?private readonly bool_isreadonly;
private cacheperiod _period; //快取的核心:生命週期
private idataexpired _itemdata; //具體的資料
public bool haschanged
在 cachepool 裡的 disposecache 介面有統一處理,但沒有發現**在定期有效呼叫?
sharecachestruct:
public ienumerabletake()
public ienumerabletoentityenumerable(bool isload = false)可以知道 sharecache 從快取載入資料時,是整塊相應型別的資料全部載入出來,適合用來管理配置、處理公有資料。
personalcache:
public ienumerabletake()它可以單個或整體進行快取載入,更適合處理單使用者的某型別資料。public t take(params object keys)
shareentity 比 baseentity 多了乙個 api:getidentityid() 未來有什麼作用再觀察。
abstractentity:
/// /// 儲存改變的屬性集合這兩個屬性,表示 abstracentity 最重要的作用應該是「部分更新修改過的資料」///
private concurrentqueue_changepropertys = new concurrentqueue();
/// /// 等待更新屬性
///
private readonly hashset_waitupdatelist = new hashset();
持續追蹤,發現其作用是向資料庫寫入修改過的資料:
sqldatasender.cs:
public bool send(params t datalist) wheret : abstractentity那什麼時候進行寫入修改資料? abstractentity 下的 entitychangeevent : iitemchangeevent 是如何起作用的?
iitemchangeevent:
[jsonignore]在 abstractentity 中,對本身數值進行「修改、刪除進行封裝的api」,都會呼叫事件通知 notify。public bool i***pired
[jsonignore]
public bool isincache
/// /// 是否有變更
///
public abstract bool haschanged
/// /// 繫結實體類的屬性名(表的列名)
///
internal abstract string propertyname
/// /// 當前物件變更事件物件
///
public abstract cacheitemchangeevent itemevent
/// /// 當前物件的子類變更事件物件
///
public abstract cacheitemchangeevent childrenevent
abstractentity 過載的 notify api:
protected override void notify(objectsender, cacheitemeventargs eventargs)
private voidputtochangekeys(abstractentity entity)可以看出這個位置並沒有真正使用 entitychangeevent 機制,而是重寫了 notity(),在修改資料後,直接向底層佇列壓入修改佇列。}
Scut學習筆記(一)
關於scut官方helloword sample無法執行的解決方案 執行server端時遇到 redis server is using game server,it s path step 1,刪除redis安裝目錄下的 dump.rdb檔案,並重啟redis服務 step 2 重新執行服務端ga...
SCUT入門 環境搭建
scut是一款基於c 且開源的遊戲服務端框架,並且有一定的上線專案。最近正在入門中。1.安裝 源 建議osc china 需要安裝.net4.5.1,推薦直接裝vs2013,都有了 預設是redis記憶體nosql資料庫 sql資料庫。沒有接觸過redis的朋友可以看下我另外一篇 redis c 入...
ArcGlobe 快取管理
arcglobe擁有快取機制,因此可以應對大量3d資料的視覺化,下面就總結下有關快取的知識點。首先,需要了解,arcglobe具有兩種快取機制 記憶體快取,硬碟快取。記憶體快取指的是分配可供 arcglobe 使用的物理記憶體 ram 大小。要獲得最佳效能,可設定對每個所使用的資料型別所分配的記憶體...