/// <summary> /// 向缓存池中添加一个键值对,若添加成功,将触发Updated事件。若键已存在于缓存池中,将替换原有的值。 /// <para>请勿在循环中调用此方法,这将频繁触发Updated事件,并严重影响性能。若要一次性添加多个值,请使用AddOrUpdates方法。</para> /// </summary> /// <param name="key">要添加的键。</param> /// <param name="value">该键对应的值。</param> public void AddOrUpdate(TKey key, TValue value) { var newModel = new CacheModel <TValue>(value); if (_caches.AddOrUpdate(key, newModel, (k, v) => newModel) != null) { Updated?.Invoke(new List <TKey> { key }, null); } ; }
/// <summary> /// 向缓存池中添加一组键值对,若有至少一个值添加成功,将在添加结束后触发Updated事件。若键已存在于缓存池中,将替换原有的值。 /// </summary> /// <param name="keyValuePairs">要添加的一组键值对。</param> public void AddOrUpdates(IEnumerable <KeyValuePair <TKey, TValue> > keyValuePairs) { var updatedKeys = new List <TKey>(); foreach (var pair in keyValuePairs) { var newModel = new CacheModel <TValue>(pair.Value); if (_caches.AddOrUpdate(pair.Key, newModel, (k, v) => newModel) != null) { updatedKeys.Add(pair.Key); } } if (updatedKeys.Count != 0) { Updated?.Invoke(updatedKeys, null); } }