高性能文件缓存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 ...
随机推荐
- Recover Binary Search Tree--leetcode难题讲解
Two elements of a binary search tree (BST) are swapped by mistake.Recover the tree without changing ...
- 自制Console线(已测试CISCO3560可用)
D9的顺序是5口在上,4口在下.从右到左分别是1-5,6-9. 5 4 3 2 1 o o o o o o o o o 9 8 7 6 用万用表量出D9的口的对应颜色.然后按照下面的表.把颜色填写上. ...
- [原]Android Native Debug
1,安装adt插件,cdt插件2,SDK目录配置: Eclipse文件菜单选择“Window”--->“Preferences”--->“Android”--->设置“SDK Loc ...
- 【cs229-Lecture20】策略搜索
本节内容: 1.POMDP: 2.Policy search算法:reinforced和Pegasus: 马尔科夫决策过程(Partially Observable Markov Decision P ...
- 【转】web集群时session同步的3种方法
转载请注明作者:海底苍鹰地址:http://blog.51yip.com/server/922.html 在做了web集群后,你肯定会首先考虑session同步问题,因为通过负载均衡后,同一个IP访问 ...
- 8月11日嵌入式Linux开发免费项目体验邀您参与
嵌入式Linux开发免费项目体验开课啦~~我们特意邀请到粤嵌金牌讲师和技术专家,为大家带来精彩有趣的嵌入式公开课,涉及到嵌入式学习.研发的方方面面.课堂中我们能体验到的不仅仅是最新资讯.技术体验,还有 ...
- 爬虫技术 -- 进阶学习(八)模拟简单浏览器(附c#代码)
由于最近在做毕业设计,需要用到一些简单的浏览器功能,于是学习了一下,顺便写篇博客~~大牛请勿喷,菜鸟练练手~ 实现界面如下:(简单朴素版@_@||) button_go实现如下: private vo ...
- ruby -- 问题解决(六)link_to to destroy not working
在Rails的development环境下开发时,使用link_to进行destroy时顺利进行,最近将环境配置成production时,使用link_to,结果not working 代码如下: & ...
- djngo快速实现--使用Bootstrap
继续django学习之旅,之前我们所做的Django练习前端都非常丑.这节我们使用Bootstrap,顿时使丑陋的页面变成白天鹅. 安装Bootstrap ...
- iOS-高德地图-手动环境搭建
一. 下载地图包 1. 链接地址: http://lbs.amap.com/api/ios-sdk/download/ 2.需要下载的包,并导入包 (1) MAMapKit-5.framework ...