我是一个菜鸟,我只是在努力,2021正视自己,面对2021!

高性能文件缓存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 }

  善用缓存,你的系统访问速度将会有一个很大的访问速度的提升。

posted @ 2015-11-13 10:16  Kencery  阅读(2393)  评论(0编辑  收藏  举报
友情链接:初心商城