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#程序设计有所帮助。

(0)

相关推荐

  • PHP MemCached高级缓存配置图文教程

    1.Memcache相关介绍 memcache是一个高性能的分布式的内存对象缓存系统,它能够用来存储各种格式的数据,包括图像.视频.文件以及数据库检索的结果等. 使用Memcache的网站一般流量都是比较大的,为了缓解数据库的压力,让Memcache作为一个缓存区域,把部分信息保存在内存中,在前端能够迅速的进行存取. 2.Memcache Win32的安装 (1)下载地址: http://www.jehiah.cz/projects/memcached-win32/ (2)安装步骤: step1

  • .net/c# memcached缓存获取所有缓存键的方法步骤

    使用组件 memcached 1.2.6 .net 类库 memcacheddotnet_clientlib-1.1.5 1.增加memcacheddotnet_clientlib-1.1.5代码 下载好组件后,用vs打开.net类库memcacheddotnet_clientlib-1.1.5,打开MemCachedClient.cs,增加如下方法: 复制代码 代码如下: public Hashtable Stats(ArrayList servers, string command)    

  • PHP MemCached 高级缓存应用代码

    Memcache常用方法 Memcache::add - 添加一个值,如果已经存在,则返回false Memcache::addServer - 添加一个可供使用的服务器地址 Memcache::close - 关闭一个Memcache对象 Memcache::connect - 创建一个Memcache对象 Memcache::debug - 控制调试功能 Memcache::decrement - 对保存的某个key中的值进行减法操作 Memcache::delete - 删除一个key值

  • PHP 内存缓存加速功能memcached安装与用法

    一.memcached 简介在很多场合,我们都会听到 memcached 这个名字,但很多同学只是听过,并没有用过或实际了解过,只知道它是一个很不错的东东.这里简单介绍一下,memcached 是高效.快速的分布式内存对象缓存系统,主要用于加速 WEB 动态应用程序.二.memcached 安装首先是下载 memcached 了,目前最新版本是 1.1.12,直接从官方网站即可下载到 memcached-1.1.12.tar.gz.除此之外,memcached 用到了 libevent,我下载的

  • Memcached缓存系统的介绍、安装以及应用方法详解

    本文实例讲述了Memcached缓存系统的介绍.安装以及应用方法.分享给大家供大家参考,具体如下: 一. memcached 是什么? memcached is a high-performance, distributed memory object caching system, generic in nature, but intended for use in speeding up dynamic web applications by alleviating database loa

  • Memcached 分布式缓存实现原理简介

    摘要 在高并发环境下,大量的读.写请求涌向数据库,此时磁盘IO将成为瓶颈,从而导致过高的响应延迟,因此缓存应运而生.无论是单机缓存还是分布式缓存都有其适应场景和优缺点,当今存在的缓存产品也是数不胜数,最常见的有redis和memcached等,既然是分布式,那么他们是怎么实现分布式的呢?本文主要介绍分布式缓存服务mencached的分布式实现原理. 缓存本质 计算机体系缓存 什么是缓存,我们先看看计算机体系结构中的存储体系,根据冯·诺依曼计算机体系结构模型,计算机分为五大部分:运算器.控制器.存

  • Laravel中扩展Memcached缓存驱动实现使用阿里云OCS缓存

    Laravel是我最近用得非常多而且越用就越喜欢的一款PHP框架,由于没有向下兼容的历史包袱,完全面向对象的风格,借助 Facades 优雅的IoC Container 实现,采用 Composer进行包管理,可以方便地引入和使用开源社区里的优秀组件--总而言之,这是一款真正让你能够 "code happy" 的"巨匠级PHP开发框架". 在尝试把自己的 Laravel App 部署到阿里云的时候,遇到了一个问题: Laravel 支持 Memcached 缓存,阿

  • php中操作memcached缓存进行增删改查数据的实现代码

    核心代码: <?php //创建一个memcache对象实例 $memcache = new Memcache; if(!$memcache->connect("127.0.0.1",11211)){ die('连接失败'); } if($memcache->set('key1',"xian",MEMCACHE_COMPRESSED,60)){ echo 'sucess!'; }//存值,其中xian字符串,也可以为数组,对象,但不能为资源 $va

  • 同台服务器使用缓存APC效率高于Memcached的演示代码

    复制代码 代码如下: <?php $memcachehost = 'localhost'; $memcacheport = '11211'; function microtime_float(){ list($usec, $sec) = explode(" ", microtime()); return ((float)$usec + (float)$sec); } function runtime($t1){ return number_format((microtime_fl

  • asp.net(C#)遍历memcached缓存对象

    STATS命令 遍历memcached缓存对象(C#)转载之青草堂 出于性能考虑,memcached没有提供遍历功能,不过我们可以通过以下两个stats命令得到所有的缓存对象. 1.stats items 显示各个slab中item的数目. 2.stats cachedump slab_id limit_num 显示某个slab中的前limit_num个key列表,显示格式:ITEM key_name [ value_length b; expire_time|access_time s] 除了

随机推荐