高性能文件缓存key-value存储—Memcached
2015-11-13 10:16
666 查看
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中读取出来需要的值信息。
![](http://images2015.cnblogs.com/blog/359161/201511/359161-20151113110150869-1165718269.png)
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.封装代码调用描述
// 源文件头信息: // <copyright file="MemcacheHelper.cs"> // Copyright(c)2014-2034 Kencery.All rights reserved. // 个人博客:http://www.cnblogs.com/hanyinglong // 创建人:韩迎龙(kencery) // 创建时间:2015-4-24 // </copyright> using System; using System.Configuration; using Memcached.ClientLibrary; namespace KenceryCommonMethod { /// <summary> /// 封装使用Memchached信息,读取缓存存放在服务器 /// <auther> /// <name>Kencery</name> /// <date>2015-4-24</date> /// </auther> /// </summary> public class MemcacheHelper { /// <summary> /// 字段_instance,存放注册的缓存信息 /// </summary> private static MemcacheHelper _instance; /// <summary> /// 缓存客户端 /// </summary> private readonly MemcachedClient _client; /// <summary> /// 受保护类型的缓存对象,初始化一个新的缓存对象 /// </summary> protected MemcacheHelper() { //读取app.Config中需要缓存的服务器地址信息,可以传递多个地址,使用","分隔 string[] serverList = ConfigurationManager.AppSettings["Memcached.ServerList"].Split(','); try { var sockIoPool = SockIOPool.GetInstance(); sockIoPool.SetServers(serverList); sockIoPool.InitConnections = 3; sockIoPool.MinConnections = 3; sockIoPool.MaxConnections = 50; sockIoPool.SocketConnectTimeout = 1000; sockIoPool.SocketTimeout = 3000; sockIoPool.MaintenanceSleep = 30; sockIoPool.Failover = true; sockIoPool.Nagle = false; //实例化缓存对象 _client = new MemcachedClient(); } catch (Exception ex) { //错误信息写入事务日志 throw new Exception(ex.Message); } } /// <summary> /// 获取缓存的实例对象,方法调用的时候使用 /// </summary> /// <returns></returns> public static MemcacheHelper GetInstance() { return _instance; } /// <summary> /// 添加缓存信息(如果存在缓存信息则直接重写设置,否则添加) /// 使用:MemcacheHelper.GetInstance().Add(key,value) /// </summary> /// <param name="key">需要缓存的键</param> /// <param name="value">需要缓存的值</param> public void Add(string key, object value) { if (_client.KeyExists(key)) { _client.Set(key, value); } _client.Add(key, value); } /// <summary> /// 添加缓存信息 /// 使用:MemcacheHelper.GetInstance().Add(key,value,Datetime.Now()) /// </summary> /// <param name="key">需要缓存的键</param> /// <param name="value">需要缓存的值</param> /// <param name="expiredDateTime">设置的缓存的过时时间</param> public void Add(string key, object value, DateTime expiredDateTime) { _client.Add(key, value, expiredDateTime); } /// <summary> /// 修改缓存的值 /// 使用:MemcacheHelper.GetInstance().Update(key,value) /// </summary> /// <param name="key">需要修改的键</param> /// <param name="value">需要修改的值</param> public void Update(string key, object value) { _client.Replace(key, value); } /// <summary> /// 修改缓存的值 /// 使用:MemcacheHelper.GetInstance().Update(key,value,Datetime.Now()) /// </summary> /// <param name="key">需要修改的键</param> /// <param name="value">需要修改的值</param> /// <param name="expiredDateTime">设置的缓存的过时时间</param> public void Update(string key, object value, DateTime expiredDateTime) { _client.Replace(key, value, expiredDateTime); } /// <summary> /// 设置缓存 /// 使用:MemcacheHelper.GetInstance().Set(key,value) /// </summary> /// <param name="key">设置缓存的键</param> /// <param name="value">设置缓存的值</param> public void Set(string key, object value) { _client.Set(key, value); } /// <summary> /// 设置缓存,并修改过期时间 /// 使用:MemcacheHelper.GetInstance().Set(key,value,Datetime.Now()) /// </summary> /// <param name="key">设置缓存的键</param> /// <param name="value">设置缓存的值</param> /// <param name="expiredTime">设置缓存过期的时间</param> public void Set(string key, object value, DateTime expiredTime) { _client.Set(key, value, expiredTime); } /// <summary> /// 删除缓存 /// 使用:MemcacheHelper.GetInstance().Delete(key) /// </summary> /// <param name="key">需要删除的缓存的键</param> public void Delete(string key) { _client.Delete(key); } /// <summary> /// 获取缓存的值 /// 使用:MemcacheHelper.GetInstance().Get(key) /// </summary> /// <param name="key">传递缓存中的键</param> /// <returns>返回缓存在缓存中的信息</returns> public object Get(string key) { return _client.Get(key); } /// <summary> /// 缓存是否存在 /// 使用:MemcacheHelper.GetInstance().KeyExists(key) /// </summary> /// <param name="key">传递缓存中的键</param> /// <returns>如果为true,则表示存在此缓存,否则比表示不存在</returns> public bool KeyExists(string key) { return _client.KeyExists(key); } /// <summary> /// 注册Memcache缓存(在Global.asax的Application_Start方法中注册) /// 使用:MemcacheHelper.RegisterMemcache(); /// </summary> public static void RegisterMemcache() { if (_instance == null) { _instance = new MemcacheHelper(); } } } }
善用缓存,你的系统访问速度将会有一个很大的访问速度的提升。
相关文章推荐
- MemCache超详细解读
- 关于Redis的和Memcached的澄清
- 一次memcached的排查
- 什么场景使用memcached而不使用redis
- redis和memcached比较
- memcached工作原理
- Memcached的配置和使用
- nginx+tomcat+memcached负载均衡集群搭建详细笔记(下)
- memcache保存session
- Redis使用总结之与Memcached异同
- simple-spring-memcached maven工程环境搭建
- gfirefly 学习之ubuntu 15 python 安装memcached, SecureCRT和Eclipse (3)
- memcache 分布式,算法实现
- Centos6.5下安装Memcached完整示例
- win下的Memcached配置使用
- linux 搭建memcached服务
- memcached安装及.NET中的Memcached.ClientLibrary使用详解
- memcached的安装与使用
- Spring集成memcached的详细介绍
- 谈谈Memcached与Redis