public interface ICache
{ object Get(string key); /// <summary>
/// 根据 key 从缓存中读取数据
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="key"></param>
/// <returns></returns>
T Get<T>(string key); /// <summary>
/// 根据 key 从缓存中读取数据
/// 当缓存中不存在读取的数据时, 将通过 getData function 获取数据.
/// 如果 getData function 的返回数据也为 null 则不会 set 到缓存.
/// 否则会将 getData function 的数据 set 到缓存, 该缓存设置按默认过期时间处理
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="key"></param>
/// <param name="getData"></param>
/// <returns></returns>
T Get<T>(string key, Func<T> getData); /// <summary>
/// 根据 key 从缓存中读取数据
/// 当缓存中不存在读取的数据时,将通过 getData function 获取数据.
/// 如果 getData function 的返回数据也为 null 则不会 set 到缓存.
/// 否则会将 getData function 的数据 set 到缓存, 该缓存设置按 timespan 过期时间处理
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="key"></param>
/// <param name="getData"></param>
/// <param name="timespan"></param>
/// <returns></returns>
T Get<T>(string key, Func<T> getData, TimeSpan timespan); /// <summary>
/// 设置数据到缓存
/// 缓存的过期时间按默认时间处理
/// </summary>
/// <param name="key"></param>
/// <param name="data"></param>
void Set(string key, object data); /// <summary>
/// 设置数据到缓存,并指定过期时间
/// </summary>
/// <param name="key"></param>
/// <param name="data"></param>
/// <param name="cacheTime"></param>
void Set(string key, object data, TimeSpan cacheTime); /// <summary>
/// 缓存数组中是否存在某项 key
/// </summary>
/// <param name="key"></param>
/// <returns></returns>
bool IsSet(string key); /// <summary>
/// 根据key移除缓存值
/// </summary>
/// <param name="key"></param>
void Remove(string key); }

  

public class MemcachedCacheProvider : ICache
{ const int DefaultCacheExpiredMinutes = 20; private MemcachedClient _Client; public MemcachedCacheProvider()
{
_Client = new MemcachedClient();
} public object Get(string key)
{
if (string.IsNullOrEmpty(key))
throw new ArgumentNullException("key");
return _Client.Get(key);
} public T Get<T>(string key)
{
object obj = this.Get(key);
if (obj is T)
{
return (T)obj;
}
return default(T);
} public T Get<T>(string key, Func<T> getData)
{
return this.Get<T>(key, getData, TimeSpan.FromMinutes(DefaultCacheExpiredMinutes));
} public T Get<T>(string key, Func<T> getData, TimeSpan timespan)
{
T val = this.Get<T>(key);
if (val == null)
{
val = getData();
if (val != null)
{
this.Set(key, val, timespan);
}
}
return val;
} public void Set(string key, object data)
{
this.Set(key, data, TimeSpan.FromMinutes(DefaultCacheExpiredMinutes));
} public void Set(string key, object data, TimeSpan cacheTime)
{
if (string.IsNullOrEmpty(key))
throw new ArgumentNullException("key");
if (data == null)
{
return;
} DateTime time = DateTime.Now.Add(cacheTime);
DateTime now = DateTime.Now;
if (now >= time)
{
throw new Exception("时间设置不正确");
} _Client.Set(key, data, time);
} public bool IsSet(string key)
{
return _Client.KeyExists(key);
} public void Remove(string key)
{
_Client.Delete(key);
}
}
// 获得客户端实例
MemcachedClient mc = new MemcachedClient(); string[] serverlist = { "10.10.20.51:11211" }; //初始化池
SockIOPool pool = SockIOPool.GetInstance();
pool.SetServers(serverlist); pool.InitConnections = 3;
pool.MinConnections = 3;
pool.MaxConnections = 5; pool.SocketConnectTimeout = 1000;
pool.SocketTimeout = 3000; pool.MaintenanceSleep = 30;
pool.Failover = true; pool.Nagle = false;
pool.Initialize();

  

Memcached 的一些用法的更多相关文章

  1. Memcached操作以及用法

    Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的速度.Memcached ...

  2. Memcached部署和用法

    一.Memcached简介 Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网 ...

  3. Memcached命令:简单获取缓存value用法

    Memcached:命令用法1.cmd 输入telnet ip  端口 进入memcached服务端窗口比如:xxx.Token_T1435622096xxx为key获取此key的memcached ...

  4. 关于 Memcached 的一些使用

    关于Memcached的一些用法, Memcached 在Windows下的版本费了很大劲,才找到.win32,win64都有.本来想自己build的,但是Cygwin下载包也是费老劲了,下不下来. ...

  5. Memcached 运行状态

    memcached-tool 命令用于查看 Memcached 运行状态,用法如下: Usage: memcached-tool <host[:port] | /path/to/socket&g ...

  6. nginx的笔记

    nginx 的安装 下载地址: http://nginx.org/download/nginx-1.4.2.tar.gz 安装准备: nginx依赖于pcre库,要先安装pcre yum instal ...

  7. NoSQL注入的分析和缓解

    本文要点介绍: 1.了解针对NoSQL的新的安全漏洞 2.五类NoSQL攻击手段,比如重言式.联合查询.JavaScript 注入.背负式查询(Piggybacked queries),以及跨域违规 ...

  8. Mac linux 安装memcached服务 用法

    今天在Mac上安装memcached服务的时候 由于安装memcached之前需要安装libevent依赖包 所以使用brew install libevent 安装过程中报错 Warning: Yo ...

  9. (转)Memcached用法--参数和命令详解

    Memcached用法--参数和命令详解 1. memcached 参数说明: # memcached -h 1.1 memcached 的参数 常用参数 -p <num> 监听的TCP端 ...

随机推荐

  1. Codeforces Round #222 (Div. 1) D. Developing Game 扫描线

    D. Developing Game 题目连接: http://www.codeforces.com/contest/377/problem/D Description Pavel is going ...

  2. Tomcat启动异常 java.net.BindException: Cannot assign requested address: JVM_Bind

    从Apache官网下载的tomcat7,在MyEclipse中启动时抛出如下异常: 严重: StandardServer.await: create[localhost:8005]: java.net ...

  3. dea工具debug断点红色变成灰色

    没事别瞎点,禁用了断点当然不走了

  4. redhat 对应LINUX 内核版本是多少

    http://blog.chinaunix.net/uid-12798245-id-4743373.html

  5. 3D单机游戏《天鹰教》源码发布(二)

    3D单机游戏<天鹰教>源码发布 作者 作者: 游蓝海 博客: http://blog.csdn.net/you_lan_hai mail:     you_lan_hai@foxmail. ...

  6. NHibernate的调试技巧和Log4Net配置

    1.查看nhibernate写在控制台里的sql语句 在配置文件中有这么个选项,假如把它设置为true,nhibernate会把执行的sql显示在控制台上. <property name=&qu ...

  7. datagrid在MVC中的运用10-勾选

    本文体验与勾选有关的特性. 需要加载的books.json 展开{ "total": 4, "rows": [ { "productid": ...

  8. SpringBoot 使用小技巧合集

    原文:https://my.oschina.net/xiedeshou/blog/1926191 设置网站图标 原来我们在使用tomcat开发时,设置网站图片时,即icon图标时,一般都是直接替换ro ...

  9. [翻译] 极具动感的 FRDLivelyButton

    FRDLivelyButton https://github.com/sebastienwindal/FRDLivelyButton FRDLivelyButton is a simple UIBut ...

  10. 中国计算机学会CCF推荐国际学术会议和期刊目录(PDF版,2015年)

    total: CCF推荐国际学术会议和期刊目录(下载) parts: 点击下载:  计算机体系结构并行与分布计算存储系统.pdf 点击下载:  计算机网络.pdf 点击下载:  网络与信息安全.pdf ...