高性能文件緩存key-value存儲—Memcached


  1.高性能文件緩存key-value存儲—Redis

  2.ASP.NET HttpRuntime.Cache緩存類使用總結

  備注:三篇博文結合閱讀,簡單理解並且使用,如果想深入學習,請多參考文章中給出的博文地址。

1.前言

   a.Memcached是一個高性能的分布式緩存系統,用於Web應用減輕數據庫負載,它通過在內存中緩存數據和對象來減少讀取數據庫的次數,從而提高網站的訪問速度。

  b.Memcached是一個給予存儲鍵/值對的HashMap,底層使用C語言完成,但是客戶端可以使用任何語言來編寫(Java,.NET,PHP).

  c.Memcached中的數據都是存儲在memcached內置的內存存儲空間中,由於數據僅存在於內存中,因此當某個服務器停止運行或者出現問題之后,所有存放在服務器上的鍵/值對都會丟失。

  d.下面這幅圖可以說明Memcached的工作過程,當首次訪問系統的時候,系統從數據庫中取得數據保存到Memcached中,在第二次訪問的時候則直接從Memcached中讀取出來需要的值信息。

    

  e.Memcached的特征

    Memcached作為高速運行的分布式緩存服務器,具有以下的特點:

    e.1:協議簡單(客戶端通信並不是使用復雜的XML格式,而是使用簡單的基於文本行的協議)

    e.2:基於libevent的事件處理(libevent是一個程序庫,即使服務器的連接數增加,也能發揮o(1)的性能)

    e.3:內置內存存儲方式(c中已經描述)

    e.4:Memcached不互相通信的分布式。

  f.推薦閱讀,http://kb.cnblogs.com/page/42731/

  g.Github下載地址:https://github.com/kencery/Common/blob/master/KenceryCommonMethod/%E7%BC%93%E5%AD%98

2.封裝代碼調用描述

  1 // 源文件頭信息:
  2 // <copyright file="MemcacheHelper.cs">
  3 // Copyright(c)2014-2034 Kencery.All rights reserved.
  4 // 個人博客:http://www.cnblogs.com/hanyinglong
  5 // 創建人:韓迎龍(kencery)
  6 // 創建時間:2015-4-24
  7 // </copyright>
  8 using System;
  9 using System.Configuration;
 10 using Memcached.ClientLibrary;
 11 
 12 namespace KenceryCommonMethod
 13 {
 14     /// <summary>
 15     /// 封裝使用Memchached信息,讀取緩存存放在服務器
 16     /// <auther>
 17     ///     <name>Kencery</name>
 18     ///     <date>2015-4-24</date>
 19     /// </auther>
 20     /// </summary>
 21     public class MemcacheHelper
 22     {
 23         /// <summary>
 24         /// 字段_instance,存放注冊的緩存信息
 25         /// </summary>
 26         private static MemcacheHelper _instance;
 27 
 28         /// <summary>
 29         /// 緩存客戶端
 30         /// </summary>
 31         private readonly MemcachedClient _client;
 32 
 33         /// <summary>
 34         /// 受保護類型的緩存對象,初始化一個新的緩存對象
 35         /// </summary>
 36         protected MemcacheHelper()
 37         {
 38             //讀取app.Config中需要緩存的服務器地址信息,可以傳遞多個地址,使用","分隔
 39             string[] serverList = ConfigurationManager.AppSettings["Memcached.ServerList"].Split(',');
 40             try
 41             {
 42                 var sockIoPool = SockIOPool.GetInstance();
 43                 sockIoPool.SetServers(serverList);
 44                 sockIoPool.InitConnections = 3;
 45                 sockIoPool.MinConnections = 3;
 46                 sockIoPool.MaxConnections = 50;
 47                 sockIoPool.SocketConnectTimeout = 1000;
 48                 sockIoPool.SocketTimeout = 3000;
 49                 sockIoPool.MaintenanceSleep = 30;
 50                 sockIoPool.Failover = true;
 51                 sockIoPool.Nagle = false;
 52                 //實例化緩存對象
 53                 _client = new MemcachedClient();
 54             }
 55             catch (Exception ex)
 56             {
 57                 //錯誤信息寫入事務日志
 58                 throw new Exception(ex.Message);
 59             }
 60         }
 61 
 62         /// <summary>
 63         /// 獲取緩存的實例對象,方法調用的時候使用
 64         /// </summary>
 65         /// <returns></returns>
 66         public static MemcacheHelper GetInstance()
 67         {
 68             return _instance;
 69         }
 70 
 71         /// <summary>
 72         /// 添加緩存信息(如果存在緩存信息則直接重寫設置,否則添加)
 73         /// 使用:MemcacheHelper.GetInstance().Add(key,value)
 74         /// </summary>
 75         /// <param name="key">需要緩存的鍵</param>
 76         /// <param name="value">需要緩存的值</param>
 77         public void Add(string key, object value)
 78         {
 79             if (_client.KeyExists(key))
 80             {
 81                 _client.Set(key, value);
 82             }
 83             _client.Add(key, value);
 84         }
 85 
 86         /// <summary>
 87         /// 添加緩存信息
 88         /// 使用:MemcacheHelper.GetInstance().Add(key,value,Datetime.Now())
 89         /// </summary>
 90         /// <param name="key">需要緩存的鍵</param>
 91         /// <param name="value">需要緩存的值</param>
 92         /// <param name="expiredDateTime">設置的緩存的過時時間</param>
 93         public void Add(string key, object value, DateTime expiredDateTime)
 94         {
 95             _client.Add(key, value, expiredDateTime);
 96         }
 97 
 98         /// <summary>
 99         /// 修改緩存的值
100         /// 使用:MemcacheHelper.GetInstance().Update(key,value)
101         /// </summary>
102         /// <param name="key">需要修改的鍵</param>
103         /// <param name="value">需要修改的值</param>
104         public void Update(string key, object value)
105         {
106             _client.Replace(key, value);
107         }
108 
109         /// <summary>
110         /// 修改緩存的值
111         /// 使用:MemcacheHelper.GetInstance().Update(key,value,Datetime.Now())
112         /// </summary>
113         /// <param name="key">需要修改的鍵</param>
114         /// <param name="value">需要修改的值</param>
115         /// <param name="expiredDateTime">設置的緩存的過時時間</param>
116         public void Update(string key, object value, DateTime expiredDateTime)
117         {
118             _client.Replace(key, value, expiredDateTime);
119         }
120 
121         /// <summary>
122         /// 設置緩存
123         /// 使用:MemcacheHelper.GetInstance().Set(key,value)
124         /// </summary>
125         /// <param name="key">設置緩存的鍵</param>
126         /// <param name="value">設置緩存的值</param>
127         public void Set(string key, object value)
128         {
129             _client.Set(key, value);
130         }
131 
132         /// <summary>
133         /// 設置緩存,並修改過期時間
134         /// 使用:MemcacheHelper.GetInstance().Set(key,value,Datetime.Now())
135         /// </summary>
136         /// <param name="key">設置緩存的鍵</param>
137         /// <param name="value">設置緩存的值</param>
138         /// <param name="expiredTime">設置緩存過期的時間</param>
139         public void Set(string key, object value, DateTime expiredTime)
140         {
141             _client.Set(key, value, expiredTime);
142         }
143 
144         /// <summary>
145         /// 刪除緩存
146         /// 使用:MemcacheHelper.GetInstance().Delete(key)
147         /// </summary>
148         /// <param name="key">需要刪除的緩存的鍵</param>
149         public void Delete(string key)
150         {
151             _client.Delete(key);
152         }
153 
154         /// <summary>
155         /// 獲取緩存的值
156         /// 使用:MemcacheHelper.GetInstance().Get(key)
157         /// </summary>
158         /// <param name="key">傳遞緩存中的鍵</param>
159         /// <returns>返回緩存在緩存中的信息</returns>
160         public object Get(string key)
161         {
162             return _client.Get(key);
163         }
164 
165         /// <summary>
166         /// 緩存是否存在
167         /// 使用:MemcacheHelper.GetInstance().KeyExists(key)
168         /// </summary>
169         /// <param name="key">傳遞緩存中的鍵</param>
170         /// <returns>如果為true,則表示存在此緩存,否則比表示不存在</returns>
171         public bool KeyExists(string key)
172         {
173             return _client.KeyExists(key);
174         }
175 
176         /// <summary>
177         /// 注冊Memcache緩存(在Global.asax的Application_Start方法中注冊)
178         /// 使用:MemcacheHelper.RegisterMemcache();
179         /// </summary>
180         public static void RegisterMemcache()
181         {
182             if (_instance == null)
183             {
184                 _instance = new MemcacheHelper();
185             }
186         }
187     }
188 }

  善用緩存,你的系統訪問速度將會有一個很大的訪問速度的提升。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM