Example #1
0
        /// <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);
        }
Example #2
0
        /// <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());
        }
Example #3
0
        /// <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));
        }
Example #4
0
        /// <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);
        }
Example #5
0
        /// <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);
        }
Example #6
0
        /// <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));
        }
Example #7
0
        /// <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));
        }