/// <summary> /// Get cache datas by type /// </summary> /// <typeparam name="T">Data type</typeparam> /// <param name="size">Return data size</param> /// <returns></returns> protected virtual List <T> GetCacheDatasByType <T>(IQuery query, int size) { var type = typeof(T); var needSort = query != null && !query.Orders.IsNullOrEmpty(); if (needSort) { return(new List <T>(0)); } #region get cache keys var typeName = type.Name; var primaryKeys = EntityManager.GetPrimaryKeys(type); var firstPrimaryKey = primaryKeys?.FirstOrDefault(); if (string.IsNullOrWhiteSpace(firstPrimaryKey)) { return(new List <T>(0)); } var cacheObject = new CacheObject() { ObjectName = typeName }; CacheKey mateKey = new CacheKey(cacheObject); mateKey.AddName(firstPrimaryKey); var getKeysCommand = new GetKeysOptions() { CacheObject = cacheObject, Query = new KeyQuery() { MateKey = mateKey.GetActualKey(), Type = KeyMatchPattern.StartWith, Page = 1, PageSize = size > 0 ? size : int.MaxValue } }; var keyResponses = CacheManager.Keys.GetKeysAsync(getKeysCommand).Result?.Responses; if (keyResponses.IsNullOrEmpty()) { return(new List <T>(0)); } List <CacheKey> dataKeys = new List <CacheKey>(); foreach (var response in keyResponses) { if (response?.Keys.IsNullOrEmpty() ?? true) { continue; } bool fullData = false; foreach (var key in response.Keys) { if (size > 0 && dataKeys.Count >= size) { fullData = true; break; } dataKeys.Add(key); } if (fullData) { break; } } if (dataKeys.IsNullOrEmpty()) { return(new List <T>(0)); } #endregion #region get cache data return(CacheManager.GetDataList <T>(dataKeys, cacheObject)); #endregion }
/// <summary> /// Remove cache data by type /// </summary> /// <param name="type">Data type</param> protected virtual void RemoveCacheDataByType(Type type) { if (type == null) { return; } var cacheObject = new CacheObject() { ObjectName = type.Name }; CacheKey mateKey = new CacheKey(cacheObject); do { var getKeysCommand = new GetKeysOptions() { CacheObject = cacheObject, Query = new KeyQuery() { MateKey = mateKey.GetActualKey(), Type = KeyMatchPattern.StartWith, Page = 1, PageSize = 10000 } }; var keyResponses = CacheManager.Keys.GetKeysAsync(getKeysCommand).Result?.Responses; if (keyResponses.IsNullOrEmpty()) { break; } List <CacheKey> cacheKeys = new List <CacheKey>(); foreach (var response in keyResponses) { if (response?.Keys.IsNullOrEmpty() ?? true) { continue; } foreach (var key in response.Keys) { cacheKeys.Add(key); } } if (cacheKeys.IsNullOrEmpty()) { break; } var keyDeleteCommand = new DeleteOptions() { CacheObject = cacheObject, Keys = cacheKeys }; var result = CacheManager.Keys.Delete(keyDeleteCommand); if (result != null && !result.Responses.IsNullOrEmpty()) { foreach (var response in result.Responses) { if (!string.IsNullOrWhiteSpace(response?.Message)) { LogManager.LogInformation <DefaultDataCachePolicy>(response.Message); } } } } while (true); }