/// <summary> /// 查询缓存键对应的缓存值的数量。 /// </summary> /// <param name="key">缓存键。</param> public async Task <int> GetTeacherCountsAsync(string key) { ConditionalValue <CacheWrapper <Teacher> > result = await StateManager.TryGetStateAsync <CacheWrapper <Teacher> >(key); if (!result.HasValue) { return(0); } CacheWrapper <Teacher> cacheWrapper = result.Value; if (cacheWrapper.IsExpired()) { await StateManager.RemoveStateAsync(key); return(0); } // 刷新滑动过期时间。 (bool needRestore, CacheWrapper <Teacher> cacheWrapper)refreshResult = cacheWrapper.Refresh(); if (refreshResult.needRestore) { await StateManager.SetStateAsync(key, refreshResult.cacheWrapper); } return(refreshResult.cacheWrapper.Caches.Count); }
/// <summary> /// 查询缓存。 /// </summary> /// <param name="key">缓存键。</param> public async Task <Student> GetSmartCacheAsync(string key) { ConditionalValue <CacheWrapper <Student> > result = await StateManager.TryGetStateAsync <CacheWrapper <Student> >(key); if (!result.HasValue) { return(null); } CacheWrapper <Student> cacheWrapper = result.Value; if (cacheWrapper.IsExpired()) { await StateManager.RemoveStateAsync(key); return(null); } // 刷新滑动过期时间。 (bool needRestore, CacheWrapper <Student> cacheWrapper)refreshResult = cacheWrapper.Refresh(); if (refreshResult.needRestore) { await StateManager.SetStateAsync(key, refreshResult.cacheWrapper); } return(refreshResult.cacheWrapper.Caches.FirstOrDefault()); }
/// <summary> /// 查询缓存。 /// </summary> /// <param name="key">缓存键。</param> /// <param name="top">返回结果数量。</param> public async Task <List <Teacher> > GetTeacherTopSmartCachesAsync(string key, int top) { ConditionalValue <CacheWrapper <Teacher> > result = await StateManager.TryGetStateAsync <CacheWrapper <Teacher> >(key); if (!result.HasValue) { return(null); } CacheWrapper <Teacher> cacheWrapper = result.Value; if (cacheWrapper.IsExpired()) { await StateManager.RemoveStateAsync(key); return(null); } // 刷新滑动过期时间。 (bool needRestore, CacheWrapper <Teacher> cacheWrapper)refreshResult = cacheWrapper.Refresh(); if (refreshResult.needRestore) { await StateManager.SetStateAsync(key, refreshResult.cacheWrapper); } return(refreshResult.cacheWrapper.Caches.GetRange(0, top)); }
/// <summary> /// 获取缓存。 /// </summary> /// <param name="key">缓存的主键。</param> public async Task <string> GetCacheAsync(string key) { ConditionalValue <CacheWrapper> result = await StateManager.TryGetStateAsync <CacheWrapper>(key); if (!result.HasValue) { return(null); } CacheWrapper cacheWrapper = result.Value; // 如果获取缓存时,给定的 key 对应的值类型跟当前类型不一致。 if (cacheWrapper.CacheType != CacheType.Normal) { throw new InvalidOperationException($"Operation against a key holding the wrong type '{cacheWrapper.CacheType}'."); } if (cacheWrapper.IsExpired()) { await StateManager.RemoveStateAsync(key); return(null); } // 刷新滑动过期时间。 (bool needRestore, CacheWrapper cacheWrapper)refreshResult = cacheWrapper.Refresh(); if (refreshResult.needRestore) { await StateManager.SetStateAsync(key, refreshResult.cacheWrapper); } return(refreshResult.cacheWrapper.Cache); }
/// <summary> /// 获取 Hash 主键+次键对应的缓存。 /// </summary> /// <param name="firstKey">主键。</param> /// <param name="secondKey">次键,为空则返回主键对应的缓存。</param> public async Task <string> GetHashCacheAsync(string firstKey, string secondKey) { ConditionalValue <CacheWrapper> state = await StateManager.TryGetStateAsync <CacheWrapper>(firstKey); if (!state.HasValue) { return(null); } CacheWrapper cacheWrapper = state.Value; // 如果获取缓存时,给定的 key 对应的值类型跟当前类型不一致。 if (cacheWrapper.CacheType != CacheType.Hash) { throw new InvalidOperationException($"Operation against a key holding the wrong type '{cacheWrapper.CacheType}'."); } // 若 first key 过期 if (cacheWrapper.IsExpired()) { await StateManager.RemoveStateAsync(firstKey); return(null); } // 刷新滑动过期时间。 (bool needRestore, CacheWrapper cacheWrapper)refreshResult = cacheWrapper.Refresh(); if (refreshResult.needRestore) { await StateManager.SetStateAsync(firstKey, refreshResult.cacheWrapper); } Dictionary <string, string> hashCacheWrappers; try { hashCacheWrappers = cacheWrapper.Cache.FromJson <Dictionary <string, string> >(); } catch { throw new ArgumentException($"The cache value which cache key '{firstKey}' is not type of Dictionary<string,string>."); } if (!hashCacheWrappers.TryGetValue(secondKey, out string hashCache)) { return(null); } return(hashCache); }
/// <summary> /// 刷新缓存有效期。 /// </summary> /// <param name="key">缓存键。</param> /// <param name="options">缓存有效期配置</param> public async Task RefreshAsync(string key, KolibreCacheOptions options) { ConditionalValue <CacheWrapper <Student> > result = await StateManager.TryGetStateAsync <CacheWrapper <Student> >(key); if (!result.HasValue) { return; } CacheWrapper <Student> cacheWrapper = result.Value; if (cacheWrapper.IsExpired()) { await StateManager.RemoveStateAsync(key); return; } await StateManager.SetStateAsync(key, cacheWrapper.Refresh(options)); }
/// <summary> /// 刷新列表缓存。 /// </summary> /// <param name="key">主键。</param> /// <param name="options">The options.</param> public async Task RefreshListCacheAsync(string key, KolibreCacheOptions options) { ConditionalValue <CacheWrapper> state = await StateManager.TryGetStateAsync <CacheWrapper>(key); if (!state.HasValue) { return; } CacheWrapper cacheWrapper = state.Value; if (cacheWrapper.IsExpired()) { await StateManager.RemoveStateAsync(key); return; } await StateManager.SetStateAsync(key, cacheWrapper.Refresh(options)); }