Memcached通用类(基于Memcached Client Library)
分享下自己编写的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)的更多相关文章
- Memcached通用类(基于enyim.com Memcached Client)
一.如果用官方提供的方法,在web.config里面配置好了各个参数和服务器IP.如下图: <?xml version="1.0"?> <configuratio ...
- Memcached的配置,SSH项目中的整合(com.whalin),Memcached工具类,Memcached的代码调用
1 修改pom.xml,添加依赖文件: <dependency> <groupId>com.whalin</groupId> <artifactId&g ...
- 分布式缓存系统Memcached简介与实践(.NET memcached client library)
缘起: 在数据驱动的web开发中,经常要重复从数据库中取出相同的数据,这种重复极大的增加了数据库负载.缓存是解决这个问题的好办法.但是ASP.NET中的虽然已经可以实现对页面局部进行缓存,但还是不够灵 ...
- GPS部标监控平台的架构设计(十一)-基于Memcached的分布式Gps监控平台
部标gps监控平台的架构,随着平台接入的车辆越来越多,架构也面临越来越大的负载挑战,我们当然希望软件尽可能的优化并能够接入更多的车辆,减少在硬件上的投资.但是当车辆增多到某一个临界点的时候,仍然要面临 ...
- Memcached帮助类
一.如果用官方提供的方法,在web.config里面配置好了各个参数和服务器IP <?xml version="1.0"?> <configuration> ...
- 基于Memcached分布式系统DRDoS拒绝服务攻击技术研究(转)
本次反射式拒绝服务攻击技术基于全球互联网分布式的Memcached服务器,需要储备一定得安全攻防知识,网络协议知识和python代码编程技术.希望在学习本篇文章知识前自行学习相关的基础知识,文章后面同 ...
- Go/Python/Erlang编程语言对比分析及示例 基于RabbitMQ.Client组件实现RabbitMQ可复用的 ConnectionPool(连接池) 封装一个基于NLog+NLog.Mongo的日志记录工具类LogUtil 分享基于MemoryCache(内存缓存)的缓存工具类,C# B/S 、C/S项目均可以使用!
Go/Python/Erlang编程语言对比分析及示例 本文主要是介绍Go,从语言对比分析的角度切入.之所以选择与Python.Erlang对比,是因为做为高级语言,它们语言特性上有较大的相似性, ...
- Memcached完全解剖–1. memcached基金会
翻译一篇技术评论社的文章,是讲memcached的连载.fcicq同学说这个东西非常实用,希望大家喜欢. 发表日:2008/7/2 作者:长野雅广(Masahiro Nagano) 原文链接:ht ...
- 适用于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通用)>,现在重新整理一 ...
随机推荐
- eclipse折叠快捷键
之前按代码折叠快捷键的时候发现时而灵时而不灵,今天突然发现了问题所在: 按ctrl+/(小键盘)使代码左边出现折叠标志 然后再按ctrl+shift+/(折叠) , ctrl+shift+*(展开 ...
- Android常见面试题目
1.Activity 的生命周期 转自:http://kb.cnblogs.com/page/70125/ 多谢楼主分享 首先看一下Android api中所提供的Activity生命周期图(不明白的 ...
- GCD 多线程 初探
GCD编程的核心就是dispatch队列,dispatch block的执行最终都会放进某个队列中去进行,它类似NSOperationQueue但更复杂也更强大,并且可以嵌套使用.所以说,结合bloc ...
- Windows 7 驱动开发
本文是对Win7(64)+VS2010+WDK7.1.0(WinDDK\7600.16385.1)开发驱动的小结. 一.系统工具 1.Win7(amd64位)系统 注:已装系统后,管理员身份运行cmd ...
- linux修改mac地址
先禁用网卡ifconfig eth0 down 再用ifconfig eth0 hw ether 新地址 这样就可以了 要想永久修改的话,在/etc/rc.d/rc.local里加上下面三句(/etc ...
- [团队项目] Scrum 项目 2.0 产品BACKLOG
Scrum 项目 2.0 阅读教材第8章,8.1~8.3节 P157~168,了解获取用户需求的办法,每个组可以选择一二加以应用. 8.4节P168-171 查阅NABCDA模型的具体说明. 2.SC ...
- poj3372 Candy Distribution
可以证明: f(k) = k *(k - 1)/ 2 (1 ≤ k ≤ n)是n的完全剩余系当且仅当n = 2 ^ t. http://poj.org/problem?id=3372
- Android listview下拉刷新 SwipeRefreshLayout
今天在Google+上看到了SwipeRefreshLayout这个名词,遂搜索了下,发现竟然是刚刚google更新sdk新增加的一个widget,于是赶紧抢先体验学习下. SwipeRefreshL ...
- Unity-Animato深入系列---FloatValue阻尼
回到 Animator深入系列总目录 Animator的SetFloat接口可以设置阻尼,并且4种类型变量只有float是支持阻尼的. public void SetFloat(int id, flo ...
- python爬虫之Scrapy 使用代理配置
转载自:http://www.python_tab.com/html/2014/pythonweb_0326/724.html 在爬取网站内容的时候,最常遇到的问题是:网站对IP有限制,会有防抓取功能 ...