Files
Web_CRICS_Server_VS2010_Prod/Common/MemoryCacheHelper.cs
2025-12-11 09:17:16 +08:00

138 lines
5.0 KiB
C#
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Caching;
using System.Text;
using System.Collections.Concurrent;
namespace Common
{
/// <summary>
/// 基于MemoryCache的缓存辅助类
/// </summary>
public static class MemoryCacheHelper
{
private static readonly Object _locker = new object();
public readonly static MemoryCache _cache = MemoryCache.Default;
private static log4net.ILog logger = log4net.LogManager.GetLogger(typeof(MemoryCacheHelper));
/// <summary>
/// 缓存数据默认2分钟后过期
/// </summary>
/// <param name="key"></param>
/// <param name="value"></param>
public static void Set(string key, object value)
{
if (value != null)
{
CacheItemPolicy policy = new CacheItemPolicy(); //创建缓存项策略
policy.AbsoluteExpiration = new DateTimeOffset(DateTime.Now.AddMinutes(10)); //设定某个时间过后将逐出缓存
Set(key, value, policy);
}
}
public static void Delete(string key)
{
lock (_locker)
{
_cache.Remove(key);
}
}
public static void SlideSet(string key, object value)
{
CacheItemPolicy policy = new CacheItemPolicy(); //创建缓存项策略
policy.SlidingExpiration = new TimeSpan(0, 20, 0); //如果20分钟内使用还使用这个数据
Set(key, value, policy);
}
public static void SlideSet(string key, object value, TimeSpan span)
{
CacheItemPolicy policy = new CacheItemPolicy(); //创建缓存项策略
policy.SlidingExpiration = span; //如果20分钟内使用还使用这个数据
Set(key, value, policy);
}
/// <summary>
/// 缓存数据,指定过期时间
/// </summary>
/// <param name="key"></param>
/// <param name="value"></param>
/// <param name="expiration"></param>
public static void Set(string key, object value, DateTimeOffset expiration)
{
CacheItemPolicy policy = new CacheItemPolicy();
policy.AbsoluteExpiration = expiration;
//policy.RemovedCallback = new CacheEntryRemovedCallback((arguments) =>
//{
// try
// {
// //第一版本的代码,先废弃掉
// string KKK = arguments.CacheItem.Key;
// if (KKK.StartsWith("UDPPackage_"))
// {
// object VVV = arguments.CacheItem.Value;
// string ti = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
// string nnn = Newtonsoft.Json.JsonConvert.SerializeObject(VVV);
// UDPPackageCount t = (UDPPackageCount)VVV;
// UDPPackage u = new UDPPackage();
// u.CommandType = KKK;
// u.TotalCount = t.Count;
// u.RemoveTime = ti;
// string mns = Newtonsoft.Json.JsonConvert.SerializeObject(u);
// logger.Error(ti + ",UDP Package" + KKK + "," + nnn);
// CSRedisCacheHelper.redis3.Publish("redis-udppackage", mns);
// }
// }
// catch (Exception ex)
// {
// logger.Info("数量统计error" + ex.Message);
// }
//});
Set(key, value, policy);
}
private static void Set(string key, object value, CacheItemPolicy policy)
{
if (value != null)
{
_cache.Set(key, value, policy);
}
}
public static object Get(string key)
{
object result = _cache.Get(key);
return result;
}
///// <summary>
///// 获取缓存对象主机的IP地址和端口优先使用mac地址匹配
///// </summary>
///// <param name="key">主机编码</param>
///// <param name="mac">mac地址</param>
///// <returns></returns>
//public static string Get(string key, string mac)
//{
// object result = _cache.Get(mac);
// if (null == result)
// {
// result = _cache.Get(key);
// }
// return result == null ? "" : result.ToString();
//}
/// <summary>
/// 判断主机是否在缓存里优先使用mac地址匹配
/// </summary>
/// <param name="key">主机编码</param>
/// <param name="mac">mac地址</param>
/// <returns></returns>
public static bool Contains(string key, string mac)
{
bool result = _cache.Contains(mac);
if (!result)
{
return _cache.Contains(key);
}
return result;
}
}
}