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. poj 3264 线段树

    题目意思:给定Q(1<=Q<=200000)个数A1,A2,```,AQ, 多次求任一区间Ai-Aj中最大数和最小数的差 线段树太弱了,题目逼格一高连代码都读不懂,今天开始重刷线段树,每天 ...

  2. gradle/maven/eclipse工程相互转化

    原文:  gradle/maven/eclipse工程相互转化 gradle/maven/eclipse工程相互转化:前提安装好相应的工具和插件.1.Maven->eclipse mvn ecl ...

  3. ControllerEvent

    1.TouchDown  --->按下去 响应事件 2.TouchRepeat --->重复点击 ,从第二次点击开始响应事件 3.TouchDragInside  ---->在组建范 ...

  4. mt7620 wireless驱动特性意外发现

    前言 今天又客户反映无线參数SSID编程了HT_AP0, 同事通过后台给他改动后反映给我,我想不正确啊,难道是无线驱动crash了?那应该不能玩才对啊... 追查线索 我们的路由器会定期汇报数据SSI ...

  5. JSPGen4 自学路线图

  6. C# 中的动态创建技术

    [转载]原文出处  http://blog.csdn.net/baiyun789/article/details/6156694 第一部分 WinForm控件在窗体中动态居中创建.删除控件及对其赋值 ...

  7. INDY10 IDHTTPSERVER返回中文不乱码

    INDY10 IDHTTPSERVER返回中文不乱码 procedure TynHttpServer.CommandGet(AContext: TIdContext; ARequestInfo: TI ...

  8. 如何在发型不乱的前提下应对单日十亿计Web请求

    原文地址:http://developer.51cto.com/art/201502/464640.htm 就在不久之前,AppLovin移动广告平台的单一广告请求数量突破了200亿大关——相当于每一 ...

  9. __super

    __super::member_function(); The __super keyword allows you to explicitly state that you are calling ...

  10. [翻译] FTCoreText

    FTCoreText An open source Objective-C interface component that makes use of the CoreText framework t ...