重写 Dictionary 达到数据超时自动删除
简介
在实际应用中存在一种需求,是数据存在有效时间,只管添加,超时后需要自动删除。通过重写集合的方式达到数据集合超时自动删除数据的需求。
代码
在新增数据时创建一个针对于这条数据的计时器,调用时使用重写的 Add 方法传入数据有效时间即可。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
|
public class TimeOutDictionary<TKey, TValue> : Dictionary<TKey, TValue> { private static object locker = new object();
public void Add(TKey key, TValue value, TimeSpan timeSpan) { lock (locker) { if (base.ContainsKey(key)) { base[key] = value; } else { base.Add(key, value); }
SetTimeoutDelete(timeSpan.TotalMilliseconds, key); } }
public void SetTimeoutDelete(double interval, TKey key) { Timer timer = new Timer(interval); timer.Elapsed += delegate (object sender, ElapsedEventArgs e) { lock (locker) { timer.Enabled = false; base.Remove(key); } }; timer.Enabled = true; } }
|