.Net下基于EnyimMemcached封裝Memcached的通用類

** 原創(chuàng)文章翰蠢,如有轉(zhuǎn)載請注明來源堤尾! **  
.Net下Memcached的引用環(huán)境包很多芋绸,EnyimMemcached包是其中的一個比較出名的媒殉。我們只需要在使用Memcached的項目中通過Nuget安裝EnyimMemcached,Nuget就會幫根據(jù)我們開發(fā)環(huán)境的版本引用相應(yīng)版本的dll及寫入配置文件摔敛,相對我們手動去下載包文件引入适袜,手動配置可謂省時省力,推薦大家使用這種安裝方式舷夺!


EnyimMemcached安裝以后,我們已經(jīng)可以通過相應(yīng)的代碼對Memcached進(jìn)行操作售貌,但我們可以根據(jù)項目實際需要對其進(jìn)行進(jìn)一步封裝给猾,方便我們的實際使用∷炭纾 
 
通常敢伸,對于一些可配置參數(shù)我們都會配置在web.config文件里。下面我們就對Memcached的參數(shù)進(jìn)行配置恒削。

  1. 打開web.config文件池颈,找到configuration的configSections子節(jié)點,添加如下配置:
<sectionGroup name="enyim.com" \>    
<section name="memcached" type="Enyim.Caching.Configuration.MemcachedClientSection, Enyim.Caching" \>    
</sectionGroup \> 

然后我們添加名為enyim.com的根節(jié)點钓丰,內(nèi)容如下:

<!--Eniym配置開始-- \>  
<enyim.com>    
<memcached protocol="Text">     
<servers>        
<add address="127.0.0.1" port="11211" />      < /servers>      
<socketPool minPoolSize="10" maxPoolSize="100" connectionTimeout="00:00:05" deadTimeout="00:02:00" />    
</memcached>
 < /enyim.com> 
< !--Eniym配置結(jié)束-->

整個配置代碼如下圖


接下來躯砰,新建MemCachedHelper.cs文件,詳細(xì)代碼如下:

    using Enyim.Caching;
    using Enyim.Caching.Configuration;
    using Enyim.Caching.Memcached;
    using System;
    using System.Net;


    #region Version Info
    /* ========================================================================
    * 【本類功能概述】MemCached緩存處理
    *
    * 作者:Zeor 時間:2016/7/24 12:03:55
    * 文件名:MemCachedHelper
    * 版本:V1.0.1
    *
    * 修改者: 時間:
    * 修改說明:
    * ========================================================================
    */
    #endregion
    namespace Zeor.MVCDemo.Common.Cache
    {
    public class MemCachedHelper
    {
        private static MemcachedClient MemClient;
        static readonly object padlock = new object();

        //線程安全的單例模式
        public static MemcachedClient getInstance()
        {
            if (MemClient == null)
            {
                lock (padlock)
                {
                    if (MemClient == null)
                    {
                        MemClientInit();
                    }
                }
            }
            return MemClient;
        }

        static void MemClientInit()
        {
            try
            {
                MemClient = new MemcachedClient();
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        /// <summary>
        /// 插入指定值
        /// </summary>
        /// <param name="key">緩存名稱 </param>
        /// <param name="value">緩存值</param>
        /// <param name="minutes">過期時間(分鐘)携丁,默認(rèn)一個禮拜</param>
        /// <returns>返回是否成功</returns>
        public bool Insert(string key, string value,int minutes=10080) {
            MemcachedClient mc = getInstance();
            var data = mc.Get(key);

            DateTime dateTime =DateTime.Now.AddMinutes(1);
            if (data == null)
                return mc.Store(StoreMode.Add, key, value, dateTime);
            else
                return mc.Store(StoreMode.Replace, key, value, dateTime);
        }

        /// <summary>
        /// 獲取緩存值
        /// </summary>
        /// <param name="key"></param>
        /// <returns></returns>
        public object Get(string key)
        {
            MemcachedClient mc = getInstance();
            return mc.Get(key);
        }

        /// <summary>
        /// 刪除指定緩存
        /// </summary>
        /// <param name="key"></param>
        /// <returns></returns>
        public bool Remove(string key) {
            MemcachedClient mc = getInstance();
            
            return mc.Remove(key);
        }

        /// <summary>
        /// 清空緩存服務(wù)器上的緩存
        /// </summary>
        public void FlushCache() {
            MemcachedClient mc = getInstance();

            mc.FlushAll();
        }
    }
    
    }

** 獲取Memcached緩存 **

    MemCachedHelper memcacheHelper = new  MemCachedHelper();  
    var obj=memcacheHelper.Get(key));

** 設(shè)置Memcached緩存 **

    MemCachedHelper memcacheHelper = new  MemCachedHelper();
    memcacheHelper.Insert(key,value,minutes));
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末琢歇,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌李茫,老刑警劉巖揭保,帶你破解...
    沈念sama閱讀 221,198評論 6 514
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異魄宏,居然都是意外死亡秸侣,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,334評論 3 398
  • 文/潘曉璐 我一進(jìn)店門宠互,熙熙樓的掌柜王于貴愁眉苦臉地迎上來味榛,“玉大人,你說我怎么就攤上這事名秀±海” “怎么了?”我有些...
    開封第一講書人閱讀 167,643評論 0 360
  • 文/不壞的土叔 我叫張陵匕得,是天一觀的道長继榆。 經(jīng)常有香客問我,道長汁掠,這世上最難降的妖魔是什么略吨? 我笑而不...
    開封第一講書人閱讀 59,495評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮考阱,結(jié)果婚禮上翠忠,老公的妹妹穿的比我還像新娘。我一直安慰自己乞榨,他們只是感情好秽之,可當(dāng)我...
    茶點故事閱讀 68,502評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著吃既,像睡著了一般考榨。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上鹦倚,一...
    開封第一講書人閱讀 52,156評論 1 308
  • 那天河质,我揣著相機與錄音,去河邊找鬼震叙。 笑死掀鹅,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的媒楼。 我是一名探鬼主播乐尊,決...
    沈念sama閱讀 40,743評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼划址!你這毒婦竟也來了科吭?” 一聲冷哼從身側(cè)響起昏滴,我...
    開封第一講書人閱讀 39,659評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎对人,沒想到半個月后谣殊,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,200評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡牺弄,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,282評論 3 340
  • 正文 我和宋清朗相戀三年姻几,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片势告。...
    茶點故事閱讀 40,424評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡蛇捌,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出咱台,到底是詐尸還是另有隱情络拌,我是刑警寧澤,帶...
    沈念sama閱讀 36,107評論 5 349
  • 正文 年R本政府宣布回溺,位于F島的核電站春贸,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏遗遵。R本人自食惡果不足惜萍恕,卻給世界環(huán)境...
    茶點故事閱讀 41,789評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望车要。 院中可真熱鬧允粤,春花似錦、人聲如沸翼岁。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,264評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽琅坡。三九已至悉患,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間脑蠕,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,390評論 1 271
  • 我被黑心中介騙來泰國打工跪削, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留谴仙,地道東北人。 一個月前我還...
    沈念sama閱讀 48,798評論 3 376
  • 正文 我出身青樓碾盐,卻偏偏與公主長得像晃跺,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子毫玖,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,435評論 2 359

推薦閱讀更多精彩內(nèi)容