C#简单定时缓存类


    public class CacheThread<T> where T : new()
    {
        /// <summary>
        /// 默认2分半钟
        /// </summary>
        private double _defaultTime = 1000 * 30 * 5;
        /// <summary>
        /// 默认启用自动清理数据
        /// </summary>
        private bool _enableDataClean = true;
        /// <summary>
        /// 是否启用数据过期清理(默认清理)
        /// </summary>
        public bool EnableDataClean { get { return _enableDataClean; } set { _enableDataClean = value; } }
        private System.Timers.Timer _timer;
        private T _obj;
        private static object _lockObj = new object();
        public T DictionaryData
        {
            get
            {
                _timer.Interval = _defaultTime;
                if (_obj == null)
                    _obj = new T();
                return _obj;
            }
            set
            {
                lock (_lockObj)
                {
                    if (value == null)
                        _obj = new T();
                    else
                        _obj = value;
                    if (this.EnableDataClean)
                        _timer.Start();
                }
            }
        }
        public CacheThread()
        {
            _obj = new T();
            if (this.EnableDataClean)
            {
                _timer = new System.Timers.Timer(_defaultTime);
                _timer.Elapsed += new System.Timers.ElapsedEventHandler(_timer_Elapsed);
            }
        }

        /// <summary>
        /// 创建缓存
        /// </summary>
        /// <param name="obj">要缓存的对象</param>
        /// <param name="enableDataClean">是否启用自动清理数据</param>
        /// <param name="defaultTime">自动清理时间间隔 单位 毫秒</param>
        public CacheThread(T obj,bool enableDataClean = true, double defaultTime = 1000 * 30 * 5) : base()
        {
            this._enableDataClean = enableDataClean;
            if (defaultTime > 0)
                _defaultTime = defaultTime;
            this.DictionaryData = obj;
        }

        void _timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
        {
            this.ClearCache();
        }

        public void ClearCache()
        {
            this._obj = default(T);
            System.GC.Collect();
            _timer.Stop();
        }
    }
    
    public class Program
    {
        static void Main(string[] args)
        {
            //查询数据源
            List<Person> personData = new List<Person>();
            personData.Add(new Person() { Id = Guid.NewGuid(), Code = "101", Name = "张三" });

            //放进缓存 默认2分半钟自动释放
            var cachePersonData = new CacheThread<List<Person>>(personData);

            //从缓存取数据
            personData = cachePersonData.DictionaryData;
        }
    }





 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值