C# Memcached缓存用法实例详解

2015-03-20  来源:本站原创  分类:C#教程  人气:13 

这篇文章主要介绍了C#中Memcached缓存用法,以实例形式详细讲述了在C#中针对Memcached缓存的各种操作,非常具有实用价值,需要的朋友可以参考下

本文实例讲述了C#中Memcached缓存的用法,分享给大家供大家参考。具体方法如下:

ICacheStrategy.cs文件如下:

public interface ICacheStrategy

{

        /// <summary>

        /// 添加数据到缓存

        /// </summary>

        /// <param name="objId">缓存名称</param>

        /// <param name="o">缓存内容</param>

        /// <param name="second">缓存时间(秒)</param>

        void Add(string objId, object o, int second);
        /// <summary>

        /// 添加数据到缓存 (依赖其它缓存)

        /// </summary>

        /// <param name="objId">缓存名称</param>

        /// <param name="o">缓存内容</param>

        /// <param name="second">缓存时间(秒)</param>

        /// <param name="dependKey">依赖缓存名称数组</param>

        void AddCacheDepend(string objId, object o, int second, string[] dependKey);
        /// <summary>

        /// 添加数据到缓存 (依赖文件)

        /// </summary>

        /// <param name="objId">缓存名称</param>

        /// <param name="o">缓存内容</param>

        /// <param name="second">缓存时间(秒)</param>

        /// <param name="files">依赖缓存名称文件名数组</param>

        void AddFileDepend(string objId, object o, int second, string[] files);
        /// <summary>

        /// 删除指定缓存

        /// </summary>

        /// <param name="objId"></param>

        void RemoveCache(string objId);
        /// <summary>

        /// 删除所有缓存

        /// </summary>

        void RemoveCacheAll();
        /// <summary>

        /// 删除匹配到的缓存

        /// </summary>

        /// <param name="pattern"></param>

        /// <returns></returns>

        void RemoveCacheRegex(string pattern);
        /// <summary>

        /// 获取所有缓存键

        /// </summary>

        /// <returns></returns>

        IList<string> GetCacheKeys();
        /// <summary>

        /// 搜索 匹配到的缓存

        /// </summary>

        /// <param name="pattern"></param>

        /// <returns></returns>

        IList<string> SearchCacheRegex(string pattern);
        /// <summary>

        /// 获得缓存数据

        /// </summary>

        /// <param name="objId"></param>

        /// <returns></returns>

        object GetCacheData(string objId);
        /// <summary>

        /// 判断此缓存是否有效

        /// </summary>

        /// <param name="objID"></param>

        /// <returns></returns>

        bool HasCache(string objID);

}

MemcachedStrategy.cs文件如下:

复制代码 代码如下:

public class MemcachedStrategy : ICacheStrategy

{

        #region ICacheStrategy 成员
        /// <summary>

        /// 添加数据到缓存

        /// </summary>

        /// <param name="objId">缓存名称</param>

        /// <param name="o">缓存内容</param>

        /// <param name="second">缓存时间(秒)</param>

        public void Add(string objId, object o, int second)

        {

            if (second > 0)

            {

                MemcachedManager.CacheClient.Set(objId, o, DateTime.Now.AddSeconds(second));

            }

            else

            {

                MemcachedManager.CacheClient.Set(objId, o);

            }

        }
        #region 缓存依赖没有用到memcached

        /// <summary>

        /// 添加数据到缓存 (依赖其它缓存)

        /// </summary>

        /// <param name="objId">缓存名称</param>

        /// <param name="o">缓存内容</param>

        /// <param name="second">缓存时间(秒)</param>

        /// <param name="dependKey">依赖缓存名称数组</param>

        public void AddCacheDepend(string objId, object o, int second, string[] dependKey)

        {

            CacheDependency dependencies = new CacheDependency(null, dependKey, DateTime.Now);

            HttpRuntime.Cache.Insert(objId, o, dependencies, DateTime.Now.AddSeconds((double)second), Cache.NoSlidingExpiration, CacheItemPriority.Default, null);

        }
        /// <summary>

        /// 添加数据到缓存 (依赖文件)

        /// </summary>

        /// <param name="objId">缓存名称</param>

        /// <param name="o">缓存内容</param>

        /// <param name="second">缓存时间(秒)</param>

        /// <param name="files">依赖缓存名称文件名数组</param>

        public void AddFileDepend(string objId, object o, int second, string[] files)

        {

            CacheDependency dependencies = new CacheDependency(files, DateTime.Now);

            HttpRuntime.Cache.Insert(objId, o, dependencies, DateTime.Now.AddSeconds((double)second), Cache.NoSlidingExpiration, CacheItemPriority.Default, null);

        }

        #endregion
        /// <summary>

        /// 删除指定缓存

        /// </summary>

        /// <param name="objId"></param>

        public void RemoveCache(string objId)

        {

            if (MemcachedManager.CacheClient.KeyExists(objId))

                MemcachedManager.CacheClient.Delete(objId);

        }
        /// <summary>

        /// 删除所有缓存

        /// </summary>

        public void RemoveCacheAll()

        {

            MemcachedManager.CacheClient.FlushAll();

        }
        /// <summary>

        /// 删除匹配到的缓存

        /// </summary>

        /// <param name="pattern"></param>

        public void RemoveCacheRegex(string pattern)

        {

            IList<string> list = SearchCacheRegex(pattern);

            foreach (var item in list)

            {

                MemcachedManager.CacheClient.Delete(item);

            }

        }
        /// <summary>

        /// 获取所有缓存键

        /// </summary>

        /// <returns></returns>

        public IList<string> GetCacheKeys()

        {

            return MemcachedManager.GetAllKeys();

        }
        /// <summary>

        /// 搜索 匹配到的缓存

        /// </summary>

        /// <param name="pattern"></param>

        /// <returns></returns>

        public IList<string> SearchCacheRegex(string pattern)

        {

            List<string> l = new List<string>();

            IList<string> cacheKeys = MemcachedManager.GetAllKeys();

            foreach (var item in cacheKeys)

            {

                if (Regex.IsMatch(item, pattern))

                {

                    l.Add(item);

                }

            }

            return l.AsReadOnly();

        }
        /// <summary>

        /// 获得缓存数据

        /// </summary>

        /// <param name="objId"></param>

        /// <returns></returns>

        public object GetCacheData(string objId)

        {

            return MemcachedManager.CacheClient.Get(objId);

        }
        /// <summary>

        /// 判断此缓存是否有效

        /// </summary>

        /// <param name="objID"></param>

        /// <returns></returns>

        public bool HasCache(string objID)

        {

            return MemcachedManager.CacheClient.KeyExists(objID);

        }

        #endregion

}

希望本文所述对大家的C#程序设计有所帮助。

相关文章
  • C# Memcached缓存用法实例详解 2015-03-20

    这篇文章主要介绍了C#中Memcached缓存用法,以实例形式详细讲述了在C#中针对Memcached缓存的各种操作,非常具有实用价值,需要的朋友可以参考下 本文实例讲述了C#中Memcached缓存的用法,分享给大家供大家参考.具体方法如下: ICacheStrategy.cs文件如下: public interface ICacheStrategy { /// <summary> /// 添加数据到缓存 /// </summary> /// <param name=&qu

  • jQuery中on()方法用法实例详解 2014-06-28

    这篇文章主要介绍了jQuery中on()方法用法,实例分析了on()方法的功能及各种常见的使用技巧,并对比分析了与bind(),live(),delegate()等方法的区别,需要的朋友可以参考下 本文实例分析了jQuery on()方法的用法.分享给大家供大家参考.具体分析如下: 一.jQuery on()方法的使用: on(events,[selector],[data],fn) events:一个或多个用空格分隔的事件类型和可选的命名空间,如"click"或"keydo

  • JavaScript中window.open用法实例详解 2014-08-02

    这篇文章主要介绍了JavaScript中window.open用法,实例分析了window.open方法的功能.参数及使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下 本文较为详细的分析了JavaScript中window.open用法.分享给大家供大家参考.具体如下: <script LANGUAGE="javascript"> window.open ('page.html', 'newwindow', 'height=100, width=400, top=0,

  • python中urllib模块用法实例详解 2014-04-09

    这篇文章主要介绍了python中urllib模块用法,以实例形式详细分析了python中urllib模块代替PHP的curl操作方法,具有不错的借鉴价值,需要的朋友可以参考下 本文实例讲述了python中urllib模块用法.分享给大家供大家参考.具体分析如下: 一.问题: 近期公司项目的需求是根据客户提供的api,我们定时去获取数据, 之前的方案是用php收集任务存入到redis队列,然后在linux下做一个常驻进程跑某一个php文件, 该php文件就一个无限循环,判断redis队列,有就执行

  • python多线程用法实例详解 2013-11-18

    这篇文章主要介绍了python多线程用法,以实例形式较为详细的分析了线程同步.队列等概念及用法技巧,需要的朋友可以参考下 本文实例分析了python多线程用法.分享给大家供大家参考.具体如下: 今天在学习尝试学习python多线程的时候,突然发现自己一直对super的用法不是很清楚,所以先总结一些遇到的问题.当我尝试编写下面的代码的时候: class A(): def __init__( self ): print "A" class B( A ): def __init__( sel

  • VC定时器的用法实例详解 2013-12-13

    这篇文章主要介绍了VC定时器的用法,以实例形式详细讲述了VC定时器的原理与具体用法,非常具有实用价值,需要的朋友可以参考下 本文实例讲述了VC中定时器的用法,分享给大家供大家参考.具体用法分析如下: 定时器在VC中的使用频繁,其原型为: WINUSERAPI UINT WINAPI SetTimer ( HWND hWnd , UINT nIDEvent, UINT uElapse, TIMERPROC lpTimerFunc); 其中的参数用法如下: hWnd 是欲设置定时器的窗体句柄.定时时

  • javascript中2个感叹号的用法实例详解 2014-03-30

    这篇文章主要介绍了javascript中2个感叹号的用法,并用大量的实例讲述了!!的常见应用情况,是非常实用的技巧,需要的朋友可以参考下 在javascript代码中经常会见到!!的情况,本文即以实例形式较为深入的分析javascript中2个感叹号的用法.分享给大家供大家参考之用.具体分析如下: javascript中的!!是逻辑"非非",即是在逻辑"非"的基础上再"非"一次.通过!或!!可以将很多类型转换成bool类型,再做其它判断. 一.应

  • php魔术变量用法实例详解 2014-05-04

    这篇文章主要介绍了php魔术变量用法,以实例形式详细分析了php中常见的各种魔术变量的具体用法,并补充说明了php中的魔术方法,具有不错的参考借鉴价值,需要的朋友可以参考下 本文实例讲述了php魔术变量用法,其中__DIR__是php5.3新增的,分享给大家供大家参考.具体用法分析如下: 系统常量 __FILE__ 当前文件名 __LINE__ 当前行数 __FUNCTION__ 当前函数名 __CLASS__ 当前类名 __METHOD__ 当前对象的方法名 详细分析 1. __FILE__

  • C#的FileSystemWatcher用法实例详解 2014-05-22

    这篇文章主要介绍了C#的FileSystemWatcher用法,以实例形似详细分析了FileSystemWatcher控件主要功能,并总结了FileSystemWatcher控件使用的技巧,需要的朋友可以参考下 本文实例详述了C#的FileSystemWatcher用法.分享给大家供大家参考.具体用法如下: FileSystemWatcher控件主要功能: 监控指定文件或目录的文件的创建.删除.改动.重命名等活动.可以动态地定义需要监控的文件类型及文件属性改动的类型. 1.常用的几个基本属性:

  • PHP邮件发送类PHPMailer用法实例详解 2014-10-10

    这篇文章主要介绍了PHP邮件发送类PHPMailer用法,详细的讲述了安装及配置的方法与功能实现代码,非常具有实用价值,需要的朋友可以参考下 本文实例讲述了PHP邮件发送类PHPMailer用法,并详细讲述了其具体的操作步骤.分享给大家供大家参考.具体步骤如下: 1.在服务器安装 sendmail sudo apt-get install sendmail 2.启动 sendmail sudo /etc/init.d/sendmail start 3.修改 php.ini [mail funct

  • C#中string用法实例详解 2014-10-24

    这篇文章主要介绍了C#中string用法,非常详细的总结了比较常见的关于C#中string的几个常用方法,需要的朋友可以参考下 在进行C#程序设计时,用的最多的莫过于string了,但有些时候由于不仔细或者基础的不牢固等因素容易出错,今天本文就来较为详细的总结一下C#中string的用法.具体如下: 1.string是一个引用类型,平时我们比较string对象,比较的是对象的值而不是对象本身 如下面代码所示: string strA="abcde"; string strB="

  • PHP中array_slice函数用法实例详解 2014-11-21

    这篇文章主要介绍了PHP中array_slice函数用法,以实例形式详细分析了array_slice函数的具体含义及使用技巧,并以分页方法为例给出了具体的应用实例,具有一定的参考借鉴价值,需要的朋友可以参考下 本文详细介绍了array_slice函数的详细用法以及一些常用的array_slice实例程序,分享给大家供大家参考.具体分析如下: array_slice() 函数在数组中根据条件取出一段值,并返回. 注释:如果数组有字符串键,所返回的数组将保留键名,参见例子 4. 语法:array_s

  • C#中while循环语句用法实例详解 2014-11-28

    这篇文章主要介绍了C#中while循环语句用法,以实例形式详细分析了while语句的用法,并对return,continue,break的区别做了进一步的分析,需要的朋友可以参考下 本文实例讲述了C#中while循环语句用法.分享给大家供大家参考.具体实现方法如下: 在C#中while循环是我们经常会用到的一种循环语句,while循环特点是直到条件为零时才跳出循环,当然中间可以利用其它函数直接跳出,对于while的具体用法有必要做一个较为详尽的分析. 先来说Foreach和For的区别,Fore

  • C#中dotnetcharting的用法实例详解 2014-12-23

    这篇文章主要介绍了C#中dotnetcharting的用法,以实例形式详细分析了基于dotnetcharting的图表绘制的各种常用方法,是非常实用的技巧,需要的朋友可以参考下 本文以实例形式详细讲述了dotnetcharting控件的用法.分享给大家供大家参考.具体用法分析如下: dotnetcharting 是一个很好用的图表控件,能画出很漂亮的报表,一般常用到的主要有柱状图.饼图.折线图三种. dotnetcharting 有web版.winform版多个版本可供使用,官方网址:http:

  • python中尾递归用法实例详解 2014-12-24

    这篇文章主要介绍了python中尾递归用法,较为详细的分析了尾递归原理与相关使用技巧,非常具有实用价值,需要的朋友可以参考下 本文实例讲述了python中尾递归用法.分享给大家供大家参考.具体分析如下: 如果一个函数中所有递归形式的调用都出现在函数的末尾,我们称这个递归函数是尾递归的.当递归调用是整个函数体中最后执行的语句且它的返回值不属于表达式的一部分时,这个递归调用就是尾递归.尾递归函数的特点是在回归过程中不用做任何操作,这个特性很重要,因为大多数现代的编译器会利用这种特点自动生成优化的代码

  • C#泛型Dictionary的用法实例详解 2014-12-31

    这篇文章主要介绍了C#泛型Dictionary的用法,并以实例的形式讲述了对键值对的填充.移除及遍历等操作,需要的朋友可以参考下 本文以实例形式讲述了C#中的泛型Dictionary的用法.具有很好的实用价值.分享给大家供大家参考.具体如下: 泛型最常见的用途是泛型集合,命名空间System.Collections.Generic 中包含了一些基于泛型的集合类,使用泛型集合类可以提供更高的类型安全性,还有更高的性能,避免了非泛型集合的重复的装箱和拆箱. 很多非泛型集合类都有对应的泛型集合类,下面

  • Python基础之函数用法实例详解 2015-02-06

    这篇文章主要介绍了Python中函数用法,包括了函数的创建.定义.参数等,需要的朋友可以参考下 本文以实例形式较为详细的讲述了Python函数的用法,对于初学Python的朋友有不错的借鉴价值.分享给大家供大家参考之用.具体分析如下: 通常来说,Python的函数是由一个新的语句编写,即def,def是可执行的语句--函数并不存在,直到Python运行了def后才存在. 函数是通过赋值传递的,参数通过赋值传递给函数 def语句将创建一个函数对象并将其赋值给一个变量名,def语句的一般格式如下:

  • Yii分页用法实例详解 2015-03-01

    这篇文章主要介绍了Yii分页用法,以实例形式详细分析了比较常见的几种分页方法及其应用特点,非常具有实用价值,需要的朋友可以参考下 下面我总结了在Yii常用的一些yii分页方式与实例代码,这里有普通分页与ajax实现分页,希望此文章对大家会有所帮助. 第一种:CListView分页 针对对象形式的数据分页 Controller: public function actionAjax() { $criteria = new CDbCriteria(); //$criteria->order = 'n

  • 将DataTable作为存储过程参数的用法实例详解 2013-12-28

    需要向存储过程中传递字符串,今天看了下SQL Server 2008的新特性,发现有表变量的使用,及其将DataTable作为参数的用法,下面与大家分享下 最近工作中写了几个存储过程,需要向存储过程中传递字符串,因为SQL Server 2000中没有内置类似于 split 的函数,只好自己处理,将前台数据集中的一列用逗号拆分存到一个List<string>中,再转化为字符串传给存储过程,很是麻烦.今天看了下SQL Server 2008的新特性,发现有表变量的使用,及其将DataTable作

  • python time模块用法实例详解 2014-03-30

    这篇文章主要介绍了python中time模块的用法,包括了各类时间函数,需要的朋友可以参考下 本文详细讲述了python的内嵌time模块的用法.分享给大家供大家参考之用.具体分析如下: 一.简介 time模块提供各种操作时间的函数 说明:一般有两种表示时间的方式: 第一种是时间戳的方式(相对于1970.1.1 00:00:00以秒计算的偏移量),时间戳是惟一的 第二种以数组的形式表示即(struct_time),共有九个元素,分别表示,同一个时间戳的struct_time会因为时区不同而不同