/// <summary> /// Initialize cache. /// </summary> /// <param name="dbTransponder">db trans object</param> /// <param name="redisTransponder">redis trans object</param> /// <param name="setting">setting.</param> /// <param name="serializer"></param> public static void Initialize(ITransponder dbTransponder, ITransponder redisTransponder, CacheSetting setting, ICacheSerializer serializer) { _readonlyPools = new CachePool(dbTransponder, redisTransponder, true, serializer); _writePools = new CachePool(dbTransponder, redisTransponder, false, serializer) { Setting = setting }; EntitySchemaSet.InitSchema(typeof(EntityHistory)); DataSyncQueueManager.Start(setting, serializer); InitListener("__CachePoolListener", setting.ExpiredInterval, "__CachePoolUpdateListener", setting.UpdateInterval); if (setting.AutoRunEvent) { StartListener(); } }
/// <summary> /// /// </summary> /// <param name="enumerable"></param> /// <param name="period"></param> public static bool AddRange(IEnumerable <ShareEntity> enumerable, int period = 0) { if (DataSyncQueueManager.SendSync(enumerable)) { foreach (var t in enumerable) { CacheItemSet itemSet; if (CacheFactory.AddOrUpdateEntity(t, out itemSet, period)) { itemSet.OnLoadSuccess(); } } return(true); } return(false); }
/// <summary> /// /// </summary> /// <param name="checkMutilKey">The entity need to reload when it has be mutil key</param> /// <param name="enumerable"></param> public static bool AddRange(bool checkMutilKey, params BaseEntity[] enumerable) { if (DataSyncQueueManager.SendSync(enumerable)) { foreach (var t in enumerable) { var schema = t.GetSchema(); CacheItemSet itemSet; if (CacheFactory.AddOrUpdateEntity(t, out itemSet)) { if (checkMutilKey && schema.Keys.Length > 1 && !itemSet.HasLoadSuccess) { ReLoad(t.PersonalId, schema); } else { itemSet.OnLoadSuccess(); } } } return(true); } return(false); }
/* * /// <summary> * /// * /// </summary> * private void BindEvent(object obj) * { * AddChildrenListener(obj); * } * * /// <summary> * /// 当前对象(包括继承)的属性触发通知事件 * /// </summary> * /// <param name="sender">触发事件源</param> * /// <param name="eventArgs"></param> * protected override void Notify(object sender, CacheItemEventArgs eventArgs) * { * //IItemChangeEvent val = sender as IItemChangeEvent; * //if (val != null && !val.HasChanged) * //{ * // return; * //} * _hasChanged = true; * PutToChangeKeys(sender as AbstractEntity); * DoChangedNotify(sender as AbstractEntity, eventArgs); * } * * /// <summary> * /// 当前对象中的属性包含的子类触发通知事件,通知到此层为根 * /// </summary> * /// <param name="sender"></param> * /// <param name="eventArgs"></param> * protected override void NotifyByChildren(object sender, CacheItemEventArgs eventArgs) * { * _hasChanged = true; * PutToChangeKeys(sender as AbstractEntity); * DoChangedNotify(sender as AbstractEntity, eventArgs); * } * * private void DoChangedNotify(AbstractEntity sender, CacheItemEventArgs eventArgs) * { * if (OnChangedNotify != null) * { * OnChangedNotify(sender, eventArgs); * } * } * * internal void SetUnChange() * { * _hasChanged = false; * } */ #endregion private void PutToChangeKeys(AbstractEntity entity) { DataSyncQueueManager.Send(entity); }
/// <summary> /// /// </summary> /// <typeparam name="V"></typeparam> /// <param name="dataList"></param> /// <returns></returns> public bool SendSync <V>(IEnumerable <V> dataList) where V : AbstractEntity, new() { return(DataSyncQueueManager.SendSync(dataList)); }