C# CacheHelper
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text.RegularExpressions;
using System.Threading;
using System.Web; namespace Utils
{
/// <summary>
/// 自定义字典缓存帮助类
/// </summary>
/// <typeparam name="TKey"></typeparam>
/// <typeparam name="TValue"></typeparam>
public class SynchronisedDictionary<TKey, TValue> : IDictionary<TKey, TValue>
{
private Dictionary<TKey, TValue> innerDict; // 缓存内容
private ReaderWriterLockSlim readWriteLock; // 读写锁 /// <summary>
/// 初始化构造函数
/// </summary>
/// <param name="dic"></param>
public SynchronisedDictionary(Dictionary<TKey, TValue> dic)
{
this.readWriteLock = new ReaderWriterLockSlim();
this.innerDict = dic ?? new Dictionary<TKey, TValue>();
} /// <summary>
/// 使用lambda初始化构造函数
/// </summary>
/// <param name="getKey"></param>
/// <param name="list"></param>
public SynchronisedDictionary(Func<TValue, TKey> getKey, List<TValue> list)
{
this.readWriteLock = new ReaderWriterLockSlim();
this.innerDict = new Dictionary<TKey, TValue>(); if (list != null && list.Count > )
{
foreach (var item in list)
{
var key = getKey(item);
if (this.innerDict.ContainsKey(key))
{
this.innerDict[key] = item;
}
else
{
this.innerDict.Add(getKey(item), item);
}
}
}
} /// <summary>
/// 同步缓存
/// </summary>
/// <param name="key">缓存键</param>
/// <param name="value">缓存值</param>
/// <param name="del">是否删除</param>
/// <remarks>
/// 新增:SyncCache(Id,Value,false)
/// 修改:SyncCache(Id,Value,false)
/// 删除:SyncCache(Id,null,true)
/// </remarks>
public void SyncCache(TKey key, TValue value, bool del = false)
{
if (del)
{
Remove(key);
}
else
{
this[key] = value;
}
} /// <summary>
/// 通过KeyValuePair新增缓存(建议使用SyncCache方法)
/// </summary>
/// <param name="item">KeyValuePair键值对</param>
public void Add(KeyValuePair<TKey, TValue> item)
{
using (new AcquireWriteLock(this.readWriteLock))
{
this.innerDict[item.Key] = item.Value;
}
} /// <summary>
/// 根据Key,Value新增缓存(建议使用SyncCache方法)
/// </summary>
/// <param name="key">缓存键</param>
/// <param name="value">缓存值</param>
public void Add(TKey key, TValue value)
{
using (new AcquireWriteLock(this.readWriteLock))
{
this.innerDict[key] = value;
}
} /// <summary>
/// 移除缓存(建议使用SyncCache方法)
/// </summary>
/// <param name="key"></param>
/// <returns></returns>
public bool Remove(TKey key)
{
bool isRemoved;
using (new AcquireWriteLock(this.readWriteLock))
{
isRemoved = this.innerDict.Remove(key);
}
return isRemoved;
} /// <summary>
/// 移除缓存(建议使用SyncCache方法)
/// </summary>
/// <param name="item"></param>
/// <returns></returns>
public bool Remove(KeyValuePair<TKey, TValue> item)
{
using (new AcquireWriteLock(this.readWriteLock))
{
return this.innerDict.Remove(item.Key);
}
} /// <summary>
/// 清空所有缓存
/// </summary>
public void Clear()
{
using (new AcquireWriteLock(this.readWriteLock))
{
this.innerDict.Clear();
}
} /// <summary>
/// 是否包含指定元素
/// </summary>
/// <param name="item">KeyValuePair键值对</param>
/// <returns></returns>
public bool Contains(KeyValuePair<TKey, TValue> item)
{
using (new AcquireReadLock(this.readWriteLock))
{
return this.innerDict.Contains<KeyValuePair<TKey, TValue>>(item);
}
} /// <summary>
/// 是否包含指定的键
/// </summary>
/// <param name="key"></param>
/// <returns></returns>
public bool ContainsKey(TKey key)
{
using (new AcquireReadLock(this.readWriteLock))
{
return this.innerDict.ContainsKey(key);
}
} /// <summary>
/// copy到指定Array中
/// </summary>
/// <param name="array"></param>
/// <param name="arrayIndex"></param>
public void CopyTo(KeyValuePair<TKey, TValue>[] array, int arrayIndex)
{
using (new AcquireReadLock(this.readWriteLock))
{
this.innerDict.ToArray<KeyValuePair<TKey, TValue>>().CopyTo(array, arrayIndex);
}
} /// <summary>
/// 获取枚举数
/// 可用foreach
/// </summary>
/// <returns></returns>
public IEnumerator GetEnumerator()
{
using (new AcquireReadLock(this.readWriteLock))
{
return this.innerDict.GetEnumerator();
}
} IEnumerator<KeyValuePair<TKey, TValue>> IEnumerable<KeyValuePair<TKey, TValue>>.GetEnumerator()
{
using (new AcquireReadLock(this.readWriteLock))
{
return this.innerDict.GetEnumerator();
}
} /// <summary>
/// 获取缓存
/// </summary>
/// <param name="key">缓存键</param>
/// <param name="value">缓存值</param>
/// <returns></returns>
public bool TryGetValue(TKey key, out TValue value)
{
using (new AcquireReadLock(this.readWriteLock))
{
return this.innerDict.TryGetValue(key, out value);
}
} /// <summary>
/// 获取缓存的所有KEY
/// </summary>
public ICollection<TKey> Keys
{
get
{
using (new AcquireReadLock(this.readWriteLock))
{
return this.innerDict.Keys;
}
}
} /// <summary>
/// 获取缓存的所有VALUE
/// </summary>
public ICollection<TValue> Values
{
get
{
using (new AcquireReadLock(this.readWriteLock))
{
return this.innerDict.Values;
}
}
} /// <summary>
/// 获取缓存长度
/// </summary>
public int Count
{
get
{
using (new AcquireReadLock(this.readWriteLock))
{
return this.innerDict.Count;
}
}
} /// <summary>
/// TValue属性读写
/// </summary>
/// <param name="key"></param>
/// <returns></returns>
public TValue this[TKey key]
{
get
{
using (new AcquireReadLock(this.readWriteLock))
{
return this.innerDict[key];
}
}
set
{
using (new AcquireWriteLock(this.readWriteLock))
{
this.innerDict[key] = value;
}
}
} /// <summary>
/// 是否只读
/// </summary>
public bool IsReadOnly
{
get
{
return false;
}
}
} /// <summary>
/// 自定义列表缓存帮助类
/// </summary>
/// <typeparam name="TValue"></typeparam>
public class SynchronisedList<TValue> : IList<TValue>
{
private List<TValue> innerList; // 缓存内容
private ReaderWriterLockSlim readWriteLock; // 读写锁 /// <summary>
/// 初始化构造函数
/// </summary>
/// <param name="list"></param>
public SynchronisedList(IEnumerable<TValue> list)
{
innerList = new List<TValue>();
readWriteLock = new ReaderWriterLockSlim();
if (list != null && list.Count() > )
{
this.innerList.AddRange(list);
}
} /// <summary>
/// 获取缓存内容列表
/// </summary>
/// <returns></returns>
public List<TValue> GetList()
{
return this.innerList;
} /// <summary>
/// 获取索引
/// </summary>
/// <param name="item"></param>
/// <returns></returns>
public int IndexOf(TValue item)
{
using (new AcquireReadLock(this.readWriteLock))
{
return innerList.IndexOf(item);
}
} /// <summary>
/// 根据索引插入值
/// </summary>
/// <param name="index"></param>
/// <param name="item"></param>
public void Insert(int index, TValue item)
{
using (new AcquireWriteLock(this.readWriteLock))
{
innerList.Insert(index, item);
}
} /// <summary>
/// 根据索引移除值
/// </summary>
/// <param name="index"></param>
public void RemoveAt(int index)
{
using (new AcquireWriteLock(this.readWriteLock))
{
innerList.RemoveAt(index);
}
} /// <summary>
/// TValue属性读写
/// </summary>
/// <param name="index"></param>
/// <returns></returns>
public TValue this[int index]
{
get
{
using (new AcquireReadLock(this.readWriteLock))
{
return innerList[index];
}
}
set
{
using (new AcquireWriteLock(this.readWriteLock))
{
innerList[index] = value;
}
}
} /// <summary>
/// 插入值
/// </summary>
/// <param name="item"></param>
public void Add(TValue item)
{
using (new AcquireWriteLock(this.readWriteLock))
{
innerList.Add(item);
}
} /// <summary>
/// 清除缓存
/// </summary>
public void Clear()
{
using (new AcquireWriteLock(this.readWriteLock))
{
innerList.Clear();
}
} /// <summary>
/// 是否包含
/// </summary>
/// <param name="item"></param>
/// <returns></returns>
public bool Contains(TValue item)
{
using (new AcquireReadLock(this.readWriteLock))
{
return innerList.Contains(item);
}
} /// <summary>
/// copy到指定Array中
/// </summary>
/// <param name="array"></param>
/// <param name="arrayIndex"></param>
public void CopyTo(TValue[] array, int arrayIndex)
{
using (new AcquireReadLock(this.readWriteLock))
{
innerList.CopyTo(array, arrayIndex);
}
} /// <summary>
/// 获取缓存长度
/// </summary>
public int Count
{
get
{
using (new AcquireReadLock(this.readWriteLock))
{
return innerList.Count;
}
}
} /// <summary>
/// 只读属性
/// </summary>
public bool IsReadOnly
{
get
{
return false;
}
} /// <summary>
/// 移除值
/// </summary>
/// <param name="item"></param>
/// <returns></returns>
public bool Remove(TValue item)
{
using (new AcquireWriteLock(this.readWriteLock))
{
return innerList.Remove(item);
}
} /// <summary>
/// 获取枚举数
/// 可用foreach
/// </summary>
/// <returns></returns>
public IEnumerator<TValue> GetEnumerator()
{
using (new AcquireReadLock(this.readWriteLock))
{
return innerList.GetEnumerator();
}
} IEnumerator IEnumerable.GetEnumerator()
{
using (new AcquireReadLock(this.readWriteLock))
{
return innerList.GetEnumerator();
}
}
} class AcquireReadLock : IDisposable
{
private ReaderWriterLockSlim rwLock;
private bool disposedValue; public AcquireReadLock(ReaderWriterLockSlim rwLock)
{
this.rwLock = new ReaderWriterLockSlim();
this.disposedValue = false;
this.rwLock = rwLock;
this.rwLock.EnterReadLock();
} public void Dispose()
{
this.Dispose(true);
GC.SuppressFinalize(this);
} protected virtual void Dispose(bool disposing)
{
if (!this.disposedValue && disposing)
{
this.rwLock.ExitReadLock();
}
this.disposedValue = true;
}
} class AcquireWriteLock : IDisposable
{
private ReaderWriterLockSlim rwLock;
private bool disposedValue; public AcquireWriteLock(ReaderWriterLockSlim rwLock)
{
this.rwLock = new ReaderWriterLockSlim();
this.disposedValue = false;
this.rwLock = rwLock;
this.rwLock.EnterWriteLock();
} public void Dispose()
{
this.Dispose(true);
GC.SuppressFinalize(this);
} protected virtual void Dispose(bool disposing)
{
if (!this.disposedValue && disposing)
{
this.rwLock.ExitWriteLock();
}
this.disposedValue = true;
}
} public class WebCacheHelper
{
System.Web.Caching.Cache Cache = HttpRuntime.Cache; public void Set(string key, object data)
{
Cache.Insert(key, data);
}
public void Set(string key, object data, DateTime absoluteExpiration, TimeSpan slidingExpiration)
{
Cache.Insert(key, data, null, absoluteExpiration, slidingExpiration);
} public object Get(string Key)
{
return Cache[Key];
} public T Get<T>(string key)
{
return (T)Cache[key];
} public bool IsSet(string key)
{
return Cache[key] != null;
} public void Remove(string Key)
{
if (Cache[Key] != null)
{
Cache.Remove(Key);
}
} public void RemoveByPattern(string pattern)
{
IDictionaryEnumerator enumerator = Cache.GetEnumerator();
Regex rgx = new Regex(pattern, (RegexOptions.Singleline | (RegexOptions.Compiled | RegexOptions.IgnoreCase)));
while (enumerator.MoveNext())
{
if (rgx.IsMatch(enumerator.Key.ToString()))
{
Cache.Remove(enumerator.Key.ToString());
}
}
} public void Clear()
{
IDictionaryEnumerator enumerator = Cache.GetEnumerator();
while (enumerator.MoveNext())
{
Cache.Remove(enumerator.Key.ToString());
}
} }
}
C# CacheHelper的更多相关文章
- 缓存工具类CacheHelper
代码: using System; using System.Collections.Generic; using System.Linq; using System.Text; using Syst ...
- MySqlHelper、CacheHelper
MySqlHelper代码: using System; using System.Collections; using System.Collections.Generic; using Syste ...
- [Cache] C#操作缓存--CacheHelper缓存帮助类 [复制链接]
using System;using System.Web;using System.Collections; namespace DotNet.Utilities{ public class Cac ...
- Asp.net Core CacheHelper 通用缓存帮助类
using System; using Microsoft.Extensions.Caching.Memory; using System.Runtime; namespace UFX.Tools { ...
- [Cache] C#操作缓存--CacheHelper缓存帮助类 (转载)
点击下载 CacheHelper.zip CacheHelper 缓存帮助类 C#怎么操作缓存 怎么设置和取缓存数据,都在这个类里面呢 下面看一下代码吧 /// <summary> /// ...
- CacheHelper工具类的使用
package com.bbcmart.util; import net.sf.ehcache.Cache; import net.sf.ehcache.CacheManager; import ne ...
- C#操作缓存--CacheHelper缓存帮助类
/// <summary>/// 类说明:Assistant/// 联系方式:361983679 /// 更新网站:<a href=\"http://www.cckan. ...
- C#缓存-依赖 CacheHelper
缓存依赖文件或文件夹 //创建缓存依赖项 CacheDependency dep = new CacheDependency(fileName);//Server.MapPath("&quo ...
- C# WebHelper-CookieHelper,CacheHelper,SessionHelper
常用web操作工具类,记录一下,本文记录的工具类,都要求引用 System.Web 1.CookieHelper /// <summary> /// Cookie工具类 /// </ ...
- WebHelper-SessionHelper、CookieHelper、CacheHelper、Tree
ylbtech-Unitity: cs-WebHelper-SessionHelper.CookieHelper.CacheHelper.Tree SessionHelper.cs CookieHel ...
随机推荐
- windows下grunt安装提示不成功
在电脑按了node.js之后,在cmd中 输入 npm install -g grunt-cli 注意啦 不是 npm install -g grunt-cli 中间多了一个空格就安装不成功了,这个空 ...
- BrnShop:自定义插件
BrnShop开源网上商城第四讲:自定义插件 重要通知:BrnShop企业版NOSQL设计(基于Redis)已经开源!源码内置于最新版的BrnShop中,感兴趣的园友可以去下载来看看.官网地址:www ...
- js urlencode , encodeURIComponent
js 对文字进行编码涉及3个函数:escape,encodeURI,encodeURIComponent,相应3个解码函数:unescape,decodeURI,decodeURIComponent ...
- 并行编程之PLINQ
并行编程之PLINQ 并行 LINQ (PLINQ) 是 LINQ 模式的并行实现.PLINQ 的主要用途是通过在多核计算机上以并行方式执行查询委托来加快 LINQ to Objects 查询的执行速 ...
- Javascript实例技巧精选(7)—设置和获取文本框与文本域的光标位置(兼容IE和Chrome,Firefox)
>>点击这里下载完整html源码<< 截图如下: 本实例描述了如何用Javascript来控制和获取文本框/文本域的鼠标光标位置,以下代码兼容IE和Chrome,Firefox ...
- Role Object(角色对象)
Role Object(角色对象) 索引 意图 结构 参与者 适用性 效果 相关模式 实现 实现方式(一):Role Object 的示例实现. 意图 通过明确地附加角色对象到目标对象中,以使对象可以 ...
- ASP.NET开发的大型网站有哪些架构方式
谈谈用ASP.NET开发的大型网站有哪些架构方式(成本) 在上篇文章里(http://www.cnblogs.com/ms0017/archive/2011/07/26/2117676.html),列 ...
- github开源项目
开源一小步,前端一大步 作为一名前端攻城狮,相信不少人已经养成了这样的习惯.当你进入一个网站,总会忍不住要打开控制台看下它是如何布局的,动画是如何实现的等.这也是前端开发者一个不错的的学习途径. ...
- eclipse plugin 导出插件包
当我们的插件在完成一个阶段性开发的时候,我们要发布一个1.0的版本.这个时候会碰到一个问题.如何把我们的插件打成包?有多种途径,下面具体讨论一下. 首先从插件完成到被他人(或者我们自己)使用有两个步骤 ...
- 如何安装ArchLinux
如何安装ArchLinux 本文基于ArchLinux(https://www.archlinux.org/)Current Release: 2013.08.01的ISO写的安装教程! ISO下 ...