/// <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); }
/// <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); } }