示例#1
0
        /// <summary>
        /// 存入Memcached
        /// </summary>
        /// <param name="cacheKey">缓存键值</param>
        /// <param name="cacheValue">缓存值</param>
        /// <param name="expiration">缓存过期策略(FileMonitorExpiration模式不适用)</param>
        public static void MemcachedSet(this string cacheKey, object cacheValue, IExpiration expiration)
        {
            DateTime expiredTime = DateTime.MaxValue;

            if (expiration is RelativeTimeExpiration)
            {
                expiredTime = ((RelativeTimeExpiration)expiration).ExpiredTime;
            }
            else if (expiration is AbsTimeExpiration)
            {
                expiredTime = ((AbsTimeExpiration)expiration).ExpiredTime;
            }

            if (mClient.KeyExists(cacheKey))
            {
                mClient.Delete(cacheKey);
            }

            mClient.Add(cacheKey, cacheValue, expiredTime);
        }
示例#2
0
        /// <summary>
        /// 写入缓存
        /// </summary>
        /// <param name="cacheName">缓存名称(可理解为缓存分类,每个类型下有N个键值对缓存项)</param>
        /// <param name="cacheKey">缓存键</param>
        /// <param name="cacheValue">缓存值</param>
        /// <param name="expiration">缓存过期策略(NeverExpiration、RelativeTimeExpiration、AbsTimeExpiration、FileMonitorExpiration类实现该接口)</param>
        public static void SetCache(this string cacheName, string cacheKey, object cacheValue, IExpiration expiration)
        {
            CacheInfo cacheInfo = new CacheInfo {
                Value = cacheValue, ExpiredTime = DateTime.MaxValue
            };

            if (expiration is RelativeTimeExpiration)
            {
                cacheInfo.ExpiredTime = ((RelativeTimeExpiration)expiration).ExpiredTime;
            }
            else if (expiration is AbsTimeExpiration)
            {
                cacheInfo.ExpiredTime = ((AbsTimeExpiration)expiration).ExpiredTime;
            }

            if (!cacheDictionary.ContainsKey(cacheName))
            {
                lock (cacheDictionary)
                {
                    if (!cacheDictionary.ContainsKey(cacheName))
                    {
                        cacheDictionary.Add(cacheName, new Dictionary <string, CacheInfo>()
                        {
                            { cacheKey, cacheInfo }
                        });
                    }
                    else
                    {
                        if (cacheDictionary[cacheName].ContainsKey(cacheKey))
                        {
                            cacheDictionary[cacheName][cacheKey] = cacheInfo;
                        }
                        else
                        {
                            cacheDictionary[cacheName].Add(cacheKey, cacheInfo);
                        }
                    }
                }
            }
            else
            {
                lock (cacheDictionary)
                {
                    if (cacheDictionary[cacheName].ContainsKey(cacheKey))
                    {
                        cacheDictionary[cacheName][cacheKey] = cacheInfo;
                    }
                    else
                    {
                        cacheDictionary[cacheName].Add(cacheKey, cacheInfo);
                    }
                }
            }

            if (expiration is FileMonitorExpiration)
            {
                FileDependencyForCache(cacheName, cacheKey, ((FileMonitorExpiration)expiration).FileFullName);
            }
        }