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的更多相关文章

  1. 高性能文件缓存key-value存储—Redis

    1.高性能文件缓存key-value存储-Memcached 2.ASP.NET HttpRuntime.Cache缓存类使用总结 备注:三篇博文结合阅读,简单理解并且使用,如果想深入学习,请多参考文 ...

  2. Redis:高性能文件缓存key-value储存

    1.前言 a.Redis是一个开源,先进的key-value(键/值对)存储,并且勇于构建高性能,可扩展的Web应用程序的完美解决方案 b.Redis和Memcached的对比 b.1 Redis数据 ...

  3. 高性能Web服务器Nginx的配置与部署研究(12)应用模块之Memcached做文件缓存时压缩引起的问题

    在上一篇文章中,提到的Nginx的Memcached模块应用场景,主要是作为文件缓存.然后就发现了一个问题,当以字节数组方式缓存较大的文件时,缓存数据会被压缩,从而在读取的时候出现问题. (本文欢迎转 ...

  4. PHP文件缓存与memcached缓存 相比 优缺点是什么呢【总结】

    如果不考虑其他任何问题,只比较速度的话,那肯定是mem快,但他们各有优缺点.文件缓存优点:1.由于现在的硬盘都非常大,所有如果是大数据的时候,放硬盘里就比较合适,比如做一个cms网站,网站里有10万篇 ...

  5. .NET Memcached Client 扩展获取所有缓存Key

    .NET Memcached Client默认实现中并没有获取所有已经缓存Key的方法,但在业务中有时候需求中需要通过正则删除符合条件的缓存内容,所以就要通过读取已经缓存Key进行相关的匹配,然后删除 ...

  6. php文件缓存数据

    最近在做微信的摇一摇跑马活动,实现原理是用户摇动手机,通过ajax往数据库写入数据(小马跑的步数),然后PC端用过ajax每一秒钟从数据库中调取一次数据(小马跑的步数),然后显示在PC屏幕上,这样就会 ...

  7. Key/Value之王Memcached初探:三、Memcached解决Session的分布式存储场景的应用

    一.高可用的Session服务器场景简介 1.1 应用服务器的无状态特性 应用层服务器(这里一般指Web服务器)处理网站应用的业务逻辑,应用的一个最显著的特点是:应用的无状态性. PS:提到无状态特性 ...

  8. 【转】 Key/Value之王Memcached初探:三、Memcached解决Session的分布式存储场景的应用

    一.高可用的Session服务器场景简介 1.1 应用服务器的无状态特性 应用层服务器(这里一般指Web服务器)处理网站应用的业务逻辑,应用的一个最显著的特点是:应用的无状态性. PS:提到无状态特性 ...

  9. PHP文件缓存实现

    有些时候,我们不希望使用redis等第三方缓存,使得系统依赖于其他服务.这时候,文件缓存会是一个不错的选择. 我们需要文件缓存实现哪些共更能: 功能实现:get.set.has.increment.d ...

随机推荐

  1. Asus ubuntu Fn恢复

    sudo sed 's/GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"/GRUB_CMDLINE_LINUX_DEFAULT="qui ...

  2. 再谈LRU双链表内存管理

    N年前我写了个双链表也发了博客,还添了代码.但是那个代码不但复杂,而且还有有问题的,一直懒得整理,放在空间误导别人.最近在写服务端,今天抽点空补一篇. 关于LRU网上随便搜,有过后端经验的人应该很多都 ...

  3. 理解RxJava:(三)RxJava的优点

    理解RxJava:(三)RxJava的优点 在第一部分,讲解了RxJava的基本结构.在第二部分,展示了operators的强大之处.但是你们可能仍然没有被说服,也没有足够的理由信服.下面是一些能让你 ...

  4. 简单Bat文件编写

    @ECHO OFFTITLE 清理Work目录E:cd E:\Android_WorkSpace@ECHO ONecho 开始打包MavenTest......mvn install pause @E ...

  5. 记一个dynamic的坑

    创建一个控制台程序和一个类库, 在控制台创建一个匿名对象,然后再在类库中访问它,代码如下: namespace ConsoleApplication1 { class Program { static ...

  6. 构造Lambda表达式

    /// <summary> /// 构造Lambda表达式 /// </summary> /// <typeparam name="T">< ...

  7. [Node.js] 也说this

    原文地址:http://www.moye.me/2014/11/21/也说this/ 引子 Any sufficiently advanced technology is indistinguisha ...

  8. Android学习笔记之HttpClient实现Http请求....

    PS:最近光忙着考试了....破组成原理都看吐了....搞的什么也不想干...写篇博客爽爽吧....貌似明天就考试了...sad... 学习笔记: 1.如何实现Http请求来实现通信.... 2.解决 ...

  9. Python内置模块(2)

    这一部分主要介绍sys.os.hashlib和re模块.其中的re模块介绍得非常详细,是本部分的重点! 均为python3.5.1环境. 一.sys模块 sys模块涉及的主要是与python解释器相关 ...

  10. Spring总结—— IOC 和 Bean 的总结

    一.Spring 官方文档中给出的 Spring 的整体结构. 二.我自己所理解的 Spring 整体结构图. 三.本次总结 Spring 核心部分 1.从上面图中可以看出,Beans 和 Conte ...