高性能文件缓存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.封装代码调用描述
// 源文件头信息:
// <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 = ;
sockIoPool.MinConnections = ;
sockIoPool.MaxConnections = ;
sockIoPool.SocketConnectTimeout = ;
sockIoPool.SocketTimeout = ;
sockIoPool.MaintenanceSleep = ;
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();
}
}
}
}
善用缓存,你的系统访问速度将会有一个很大的访问速度的提升。
高性能文件缓存key-value存储—Memcached的更多相关文章
- 高性能文件缓存key-value存储—Redis
1.高性能文件缓存key-value存储-Memcached 2.ASP.NET HttpRuntime.Cache缓存类使用总结 备注:三篇博文结合阅读,简单理解并且使用,如果想深入学习,请多参考文 ...
- Redis:高性能文件缓存key-value储存
1.前言 a.Redis是一个开源,先进的key-value(键/值对)存储,并且勇于构建高性能,可扩展的Web应用程序的完美解决方案 b.Redis和Memcached的对比 b.1 Redis数据 ...
- 高性能Web服务器Nginx的配置与部署研究(12)应用模块之Memcached做文件缓存时压缩引起的问题
在上一篇文章中,提到的Nginx的Memcached模块应用场景,主要是作为文件缓存.然后就发现了一个问题,当以字节数组方式缓存较大的文件时,缓存数据会被压缩,从而在读取的时候出现问题. (本文欢迎转 ...
- PHP文件缓存与memcached缓存 相比 优缺点是什么呢【总结】
如果不考虑其他任何问题,只比较速度的话,那肯定是mem快,但他们各有优缺点.文件缓存优点:1.由于现在的硬盘都非常大,所有如果是大数据的时候,放硬盘里就比较合适,比如做一个cms网站,网站里有10万篇 ...
- .NET Memcached Client 扩展获取所有缓存Key
.NET Memcached Client默认实现中并没有获取所有已经缓存Key的方法,但在业务中有时候需求中需要通过正则删除符合条件的缓存内容,所以就要通过读取已经缓存Key进行相关的匹配,然后删除 ...
- php文件缓存数据
最近在做微信的摇一摇跑马活动,实现原理是用户摇动手机,通过ajax往数据库写入数据(小马跑的步数),然后PC端用过ajax每一秒钟从数据库中调取一次数据(小马跑的步数),然后显示在PC屏幕上,这样就会 ...
- Key/Value之王Memcached初探:三、Memcached解决Session的分布式存储场景的应用
一.高可用的Session服务器场景简介 1.1 应用服务器的无状态特性 应用层服务器(这里一般指Web服务器)处理网站应用的业务逻辑,应用的一个最显著的特点是:应用的无状态性. PS:提到无状态特性 ...
- 【转】 Key/Value之王Memcached初探:三、Memcached解决Session的分布式存储场景的应用
一.高可用的Session服务器场景简介 1.1 应用服务器的无状态特性 应用层服务器(这里一般指Web服务器)处理网站应用的业务逻辑,应用的一个最显著的特点是:应用的无状态性. PS:提到无状态特性 ...
- PHP文件缓存实现
有些时候,我们不希望使用redis等第三方缓存,使得系统依赖于其他服务.这时候,文件缓存会是一个不错的选择. 我们需要文件缓存实现哪些共更能: 功能实现:get.set.has.increment.d ...
随机推荐
- 6x12了快2个月,累的不行……
6x12了快2个月,累的不行…… 咱就是传说中的会iOS, Android, .NET,JAVA, JAVASCRIPT,SQL SERVER的 Full stack developer (全端工程师 ...
- 跟随标准与Webkit源码探究DOM -- 获取元素之querySelector,querySelectorAll
使用CSS选择器获取元素 -- querySelector,querySelectorAll(HTML5) 标准 W3C Selector API Level 1为Document,DocumentF ...
- 视觉SLAM中的数学基础 第四篇 李群与李代数(2)
前言 理解李群与李代数,是理解许多SLAM中关键问题的基础.本讲我们继续介绍李群李代数的相关知识,重点放在李群李代数的微积分上,这对解决姿态估计问题具有重要意义. 回顾 为了描述三维空间里的运动,我们 ...
- Discuz & UCenter 修改手记 - 2014.12.19
最近在整JAVA和UCENTER的东西,受限于项目架构需要,无法完全以UCENTER为中心,所以在对接过程中遇到了许多不愉快的事情.经历多番研究,终于解决了其中了两个大问题,现记录下来,以备日后查看. ...
- 无插件纯Web HTML5 3D机房 终结篇(新增资产管理、动环监控等内容)
原本以为这次的机房资产管理项目告一段落,可以歇一歇,哥还是太天真了.我们伟大的甲方又拿下了第二期的项目,誓把哥的才华发挥到极致啊.国庆长假也没正经休息几天,硬是给人折腾出了个demo,加上了容量管理. ...
- 关于welcome-file-list(欢迎页)不起作用的解决办法
今天我遇到了一个问题,就是直接输入http://localhost:8080/xxx-admin/,不是跳转到index.html,而是报404找不到的错误,根据错误信息看明显是没有跳转到index. ...
- [原创]AHA大会回顾
AHA大会回顾 缘起 AHA之前参加了Daniel的培训,了解到AHA大会,觉得很高大上,开始有些心动.考虑到是工作时间,而且是外地,所以也就停留在心动层面了.之后与伯薇和四正吃饭,听说他们要去参加这 ...
- Java知多少(110)数据库之插入记录
插入数据表记录有3种方案 一.使用Statement对象 实现插入数据表记录的SQL语句的语法是: insert into 表名(字段名1,字段名2,……)value (字段值1,字段值2,……) 例 ...
- Access导出csv 内容添加双引号 vba
要求:导出的csv文件,用文本工具打开时,文字内容需要有双引号,如下:"1","name1","name2","" 我之 ...
- 数据可视化(4)--jqplot
本来打算继续研究Google Charts,但上头下了指示让看jqplot,无奈,只好先将Google Charts放一放,不过真心觉得Google Charts不错,现在先开始jqplot. jqP ...