分享下自己编写的Memcached通用类。欢迎大家帮忙指点下哈~

使用的是.NET memcached client library 客户端+Memcached Providers

using System;
using System.Collections;
using System.Collections.Generic;
using System.Text;
using Memcached.ClientLibrary; namespace KOC.Common.DataAccess
{
/// <summary>
/// Memcache通用类
/// </summary>
public abstract class MemberHelper
{
#region 创建Memcache服务
/// <summary>
/// 创建Memcache服务
/// </summary>
/// <param name="serverlist">IP端口列表</param>
/// <param name="poolName">Socket连接池名称</param>
/// <returns>Memcache客户端代理类</returns>
private static MemcachedClient CreateServer(ArrayList serverlist, string poolName)
{
//初始化memcache服务器池
SockIOPool pool = SockIOPool.GetInstance(poolName);
//设置Memcache池连接点服务器端。
pool.SetServers(serverlist);
pool.Initialize();
//其他参数根据需要进行配置 //创建了一个Memcache客户端的代理类。
MemcachedClient mc = new MemcachedClient();
mc.PoolName = poolName;
mc.EnableCompression = false;//是否压缩 return mc;
}
#endregion #region 缓存是否存在
/// <summary>
/// 缓存是否存在
/// </summary>
/// <param name="serverlist">IP端口列表</param>
/// <param name="key">键</param>
/// <returns></returns>
public static bool CacheIsExists(ArrayList serverlist, string poolName, string key)
{
MemcachedClient mc = CreateServer(serverlist, poolName); if (mc.KeyExists(key))
{
return true;
}
else
{
return false;
} }
#endregion #region 添加缓存 #region 添加缓存(键不存在则添加,键存在则不能添加)
/// <summary>
/// 添加缓存(键不存在则添加,键存在则不能添加)
/// </summary>
/// <param name="serverlist">IP端口列表</param>
/// <param name="poolName">连接池名称</param>
/// <param name="key">键</param>
/// <param name="value">值</param>
/// <param name="minutes">过期分钟数</param>
/// <returns></returns>
public static bool AddCache(ArrayList serverlist, string poolName, string key, string value, int minutes)
{
MemcachedClient mc = CreateServer(serverlist, poolName);
return mc.Add(key, value, DateTime.Now.AddMinutes(minutes));
}
#endregion #region 添加缓存(键不存在则添加,键存在则覆盖)
/// <summary>
/// 添加缓存(键不存在则添加,键存在则覆盖)
/// </summary>
/// <param name="serverlist">IP端口列表</param>
/// <param name="poolName">连接池名称</param>
/// <param name="key">键</param>
/// <param name="value">值</param>
/// <param name="minutes">过期分钟数</param>
/// <returns></returns>
public static bool SetCache(ArrayList serverlist, string poolName, string key, string value, int minutes)
{
MemcachedClient mc = CreateServer(serverlist, poolName);
return mc.Set(key, value, DateTime.Now.AddMinutes(minutes));
}
#endregion #endregion #region 替换缓存 #region 替换缓存(键存在的才能替换,不存在则不替换)
/// <summary>
/// 替换缓存(键存在的才能替换,不存在则不替换)
/// </summary>
/// <param name="serverlist">IP端口列表</param>
/// <param name="poolName">连接池名称</param>
/// <param name="key">键</param>
/// <param name="value">值</param>
/// <param name="minutes">过期分钟数</param>
/// <returns></returns>
public static bool ReplaceCache(ArrayList serverlist, string poolName, string key, string value, int minutes)
{
MemcachedClient mc = CreateServer(serverlist, poolName);
return mc.Replace(key, value, DateTime.Now.AddMinutes(minutes));
}
#endregion #endregion #region 获取缓存 #region 获取单个键对应的缓存
/// <summary>
/// 获取单个键对应的缓存
/// </summary>
/// <param name="serverlist">IP端口列表</param>
/// <param name="poolName">连接池名称</param>
/// <param name="key">键</param>
/// <returns></returns>
public static object GetCache(ArrayList serverlist, string poolName, string key)
{
MemcachedClient mc = CreateServer(serverlist, poolName);
if (mc.KeyExists(key))
{
return mc.Get(key);
}
else
{
return "";
}
}
#endregion #region 获取键数组对应的值
/// <summary>
/// 获取键数组对应的值
/// </summary>
/// <param name="serverlist">IP端口列表</param>
/// <param name="poolName">连接池名称</param>
/// <param name="keys">键列表</param>
/// <returns>Hashtable键值对</returns>
public static Hashtable GetCacheHt(ArrayList serverlist, string poolName, string[] keys)
{
MemcachedClient mc = CreateServer(serverlist, poolName);
return mc.GetMultiple(keys);
}
#endregion #region 获取键数组对应的值
/// <summary>
/// 获取键数组对应的值
/// </summary>
/// <param name="serverlist">IP端口列表</param>
/// <param name="poolName">连接池名称</param>
/// <param name="keys">键列表</param>
/// <returns>值的数组(不包含键)</returns>
public static object[] GetCacheList(ArrayList serverlist, string poolName, string[] keys)
{
MemcachedClient mc = CreateServer(serverlist, poolName);
object[] list = mc.GetMultipleArray(keys);
ArrayList returnList = new ArrayList();
for (int i = ; i < list.Length; i++)
{
if (list[i] != null)
{
returnList.Add(list[i]);
}
}
return returnList.ToArray();
}
#endregion #endregion #region 删除缓存
/// <summary>
/// 删除缓存
/// </summary>
/// <param name="serverlist">IP端口列表</param>
/// <param name="poolName">连接池名称</param>
/// <param name="key">键</param>
/// <returns></returns>
public static bool DelCache(ArrayList serverlist, string poolName, string key)
{
MemcachedClient mc = CreateServer(serverlist, poolName);
return mc.Delete(key);
}
#endregion #region 清空所有缓存
/// <summary>
/// 清空所有缓存
/// </summary>
/// <param name="serverlist">IP端口列表</param>
/// <param name="poolName">连接池名称</param>
/// <returns></returns>
public static bool FlushAll(ArrayList serverlist, string poolName)
{
MemcachedClient mc = CreateServer(serverlist, poolName);
return mc.FlushAll();
}
#endregion
}
}

Memcached通用类(基于Memcached Client Library)的更多相关文章

  1. Memcached通用类(基于enyim.com Memcached Client)

    一.如果用官方提供的方法,在web.config里面配置好了各个参数和服务器IP.如下图: <?xml version="1.0"?> <configuratio ...

  2. Memcached的配置,SSH项目中的整合(com.whalin),Memcached工具类,Memcached的代码调用

     1 修改pom.xml,添加依赖文件: <dependency> <groupId>com.whalin</groupId> <artifactId&g ...

  3. 分布式缓存系统Memcached简介与实践(.NET memcached client library)

    缘起: 在数据驱动的web开发中,经常要重复从数据库中取出相同的数据,这种重复极大的增加了数据库负载.缓存是解决这个问题的好办法.但是ASP.NET中的虽然已经可以实现对页面局部进行缓存,但还是不够灵 ...

  4. GPS部标监控平台的架构设计(十一)-基于Memcached的分布式Gps监控平台

    部标gps监控平台的架构,随着平台接入的车辆越来越多,架构也面临越来越大的负载挑战,我们当然希望软件尽可能的优化并能够接入更多的车辆,减少在硬件上的投资.但是当车辆增多到某一个临界点的时候,仍然要面临 ...

  5. Memcached帮助类

    一.如果用官方提供的方法,在web.config里面配置好了各个参数和服务器IP <?xml version="1.0"?> <configuration> ...

  6. 基于Memcached分布式系统DRDoS拒绝服务攻击技术研究(转)

    本次反射式拒绝服务攻击技术基于全球互联网分布式的Memcached服务器,需要储备一定得安全攻防知识,网络协议知识和python代码编程技术.希望在学习本篇文章知识前自行学习相关的基础知识,文章后面同 ...

  7. Go/Python/Erlang编程语言对比分析及示例 基于RabbitMQ.Client组件实现RabbitMQ可复用的 ConnectionPool(连接池) 封装一个基于NLog+NLog.Mongo的日志记录工具类LogUtil 分享基于MemoryCache(内存缓存)的缓存工具类,C# B/S 、C/S项目均可以使用!

    Go/Python/Erlang编程语言对比分析及示例   本文主要是介绍Go,从语言对比分析的角度切入.之所以选择与Python.Erlang对比,是因为做为高级语言,它们语言特性上有较大的相似性, ...

  8. Memcached完全解剖–1. memcached基金会

    翻译一篇技术评论社的文章,是讲memcached的连载.fcicq同学说这个东西非常实用,希望大家喜欢. 发表日:2008/7/2  作者:长野雅广(Masahiro Nagano)  原文链接:ht ...

  9. 适用于app.config与web.config的ConfigUtil读写工具类 基于MongoDb官方C#驱动封装MongoDbCsharpHelper类(CRUD类) 基于ASP.NET WEB API实现分布式数据访问中间层(提供对数据库的CRUD) C# 实现AOP 的几种常见方式

    适用于app.config与web.config的ConfigUtil读写工具类   之前文章:<两种读写配置文件的方案(app.config与web.config通用)>,现在重新整理一 ...

随机推荐

  1. 6*17点阵的Window程序, Java写的。

    package com.wulala; import java.awt.BorderLayout;import java.awt.Color;import java.awt.Dimension;imp ...

  2. Spring的javaMail邮件发送(带附件)

    项目中经常用到邮件功能,在这里简单的做一下笔记,方便日后温习. 首先需要在配置文件jdbc.properties添加: #------------ Mail ------------ mail.smt ...

  3. Java中类方法与实例方法的区别

    实例方法可以对当前对象的实例变量进行操作,也可以对类变量进行操作,但类方法不能访问实例变量.实例方法必须由实例对象来调用,而类方法除了可由实例对象调用外,还可以由类名直接调用. 另外,在类方法中不能使 ...

  4. tar+gzip

    tar打gzip包: tar -czvf sourceDir.tar.gz sourceDir tar查看压缩包内容: tar -tvf sourceDir.tar.gz tar解压缩包crontab ...

  5. iOS:UITableView 方法 属性

    参考:https://developer.apple.com/library/iOS/documentation/UIKit/Reference/UITableView_Class/Reference ...

  6. C#:写日志

    一.直接写入文件 /// <summary> /// 将message的内容写入日志文件 /// </summary> /// <param name="msg ...

  7. (java)==和equals()的使用小结

    1.如果两个变量说基本数据类型,且都是数值类型,eg.65f,65(不一定要求数据类型严格相同),只要两个变量的值相等,就将返回true int it=65; float fl=65.0f; char ...

  8. css 前景色与背景色

    前景色:color:#990000; 背景色:background-color:red; 可以用来设置文字的前景色与背景色 <!-- 作者:纤锐出处:http://www.cnblogs.com ...

  9. Bellman-Ford 算法及其优化

    Bellman-Ford 算法及其优化 转自:http://hi.baidu.com/jzlikewei/blog/item/94db7950f96f995a1038c2cd.html Bellman ...

  10. Find The Multiple 分类: 搜索 POJ 2015-08-09 15:19 3人阅读 评论(0) 收藏

    Find The Multiple Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 21851 Accepted: 8984 Sp ...