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. spring boot2集成ES详解

    一:运行环境 JDK:1.8 ES:5.6.4 二:学习内容 如何构建spring-data-elasticsearch环境? 如何实现常用的增删改查? 如何实现对象嵌套也就是1对多这种关系? 三:J ...

  2. bzoj 2460 拟阵+判线性相关

    /************************************************************** Problem: 2460 User: idy002 Language: ...

  3. SQL 列转行,即多行合并成一条

    需求:按照分组,将多条记录内容合并成一条,效果如下: 数据库示例: CREATE TABLE [t2]([NID] [bigint] NULL,[district] [nvarchar](255) N ...

  4. Spring3.1.2与Hibernate4.1.8整合

    整合Spring3.1.2 与 Hibernate 4.1.8 首先准备整合jar: Spring3.1.2: org.springframework.aop-3.1.2.RELEASE.jar or ...

  5. 把NDK的工具链提取出来单独使用

    独立toolchain 把NDK压缩包解压到系统,如/mnt目录下,后在/mnt目录下建立文件夹my_ndk_toolchain,然后再/mnt目录下执行以下命令:/mnt/android-ndk-r ...

  6. [ IOS ] iOS-控制器View的创建和生命周期

    reference to  : 1. 控制器View的创建 首先我们来看一下控制器view创建的流程图 控制器view加载.jpeg 从图中我们可以看出,在控制器view加载过程中有两个重要的方法lo ...

  7. PyCharm中Python代码提示:Shadows name from outer scope

    函数内部的变量,如果和函数被调用的外部的变量一样的话,就被PyCharm中叫做shadows name 这样的话,容易引发不容易觉察到的,由于函数内部和外部的变量名一致而引发的一些问题: 比如:内部函 ...

  8. C语言:用字符读取流和输出流来读写入数据。(文本文件)

    /* 文件的几种操作模式: r:只读   w:只写   rw:可读可写 文件的分类: t:文本文件(字符文件)   b:二进制文件(字节文件) 注意: 采用只读方式打开文件时,如果源文件不存在,打开文 ...

  9. 从Java的角度看前端JS各种框架

    今天看到一篇不错的文章: 从Java的角度理解前端框架,nodejs,reactjs,angularjs,requirejs,seajs http://blog.csdn.net/uikoo9/art ...

  10. Informatica 常用组件Aggregator之一 聚合表达式

    转换类型:已连接.主动        聚合转换允许您执行聚合计算,比如平均值和总和.聚合转换与表达式转换不同,您可以使用聚合转换对多组执行计算.而表达式转换只允许您逐行地执行计算.        使用 ...