1、 why Memcached

1.1   一台web服务器上,iis接收的请求数是有限的,当访问量超大的时候,网站访问就会遇到瓶颈了,处理方式就是运用多了服务器把请求数分流(集群),对外公布的就一个公共的ip。

1.2   当数据访问量有10w时候,通过3台服务器分流请求,每台即承担了3.3w个请求,当用户登录的时候,如何共享登录信息就成为需要解决的问题(如把登录信息放到数据库中,性能会很差),这就是分布式缓存的运用场景。

2、 Memcached基本介绍

2.1 key最大:255字节,value最大:1m,{key:key1,value:123}

3、Windows下使用Memcache

3.1 下载memcache:www.code.jellycan.com/Memcache

3.2 安装服务:cmd---Memcached.exe –d install

3.3 启动服务:cmd---Memcached.exe –d start (restart 重启,stop关闭)

3.4 检查服务是否启动:连接到Memcache控制台:telnet 127.0.0.1 11211,回车,输入命令:stats 检查当前服务状态。

3.5 卸载Memcached.exe –d uninstall

遇到问题:如无法启动此程序,解决方法:下载MSVCR71.dll,安装上即可。

3.6 增删改查输命令方式

3.6.1 add keyname 0 0 5 回车 //第一个0是一个数字,第二个是过期时间,单位秒,0表示不限期,5表示value长度,如keyname存在,则不做操作

12345 //value内容

3.6.2 get keyname //得到相应的value的值

3.6.3 delete keyname //删除

3.6.4 set keyname 0 0 5 回车 //如果没有则添加,如有就更新

12345

3、 c#下操作memcache

4、 微软缓存方式

demo

业务逻辑层:

接口:ICacheManager

 public interface ICacheManager
{
object Get(string key);
void Set(string key, object value);
void Set(string key, object value, int timeout);
void Remove(string key);
void RemoveAll();
}

CacheFactory类:

 public class CacheFactory
{
private static ICacheManager _instance = null;
private static object m_LockObj = new object();
private CacheFactory() { }
static CacheFactory()
{
GetInstance();
}
public static ICacheManager GetInstance()
{
if (_instance == null)
{
lock (m_LockObj)
{
if (_instance == null)
{
string cacheType = ConfigurationSettings.AppSettings["CacheType"];
if (cacheType == "MemCacheManager")
_instance = new MemCachedManager();
else
_instance = new MsCacheManager();
}
}
}
return _instance;
}
}

MemCachedManager类:

 public class MemCachedManager: ICacheManager
{
private MemcachedClient m_CacheManager; public MemCachedManager()
{
m_CacheManager = MemcachedClient.GetInstance("CachePS");
}
public void Set(string key, object value)
{
m_CacheManager.Set(key, value);
}
public void Set(string key, object value, int timeout)
{
m_CacheManager.Set(key, value, DateTime.Now.AddMinutes(timeout));
}
public object Get(string key)
{
return m_CacheManager.Get(key);
}
public void Remove(string key)
{
m_CacheManager.Delete(key);
}
public void RemoveAll()
{
m_CacheManager.FlushAll();
}
}

MsCacheManager类:

 public class MsCacheManager : ICacheManager
{
private BaseCacheDAL m_CacheManager; public MsCacheManager()
{
m_CacheManager = new BaseCacheDAL("CachePS");
} public object Get(string key)
{
return m_CacheManager.GetCache(key);
} public void Set(string key, object value)
{
m_CacheManager.SetCache(key, value, );
} public void Set(string key, object value, int timeout)
{
m_CacheManager.SetCache(key, value, timeout);
} public void Remove(string key)
{
m_CacheManager.Remove(key);
} public void RemoveAll()
{
m_CacheManager.RemoveAll();
}
}

调用:

  public static DataTable GetCarPList(int UserId)
{
DataTable dt;
dt = cacheManger.Get(CacheKey.GetCarPList_Key()) as DataTable;
if (dt == null)
{
string sql = string.Format("select C.CarId,C.ProId,C.UserId,C.BuyNumber,P.ProName,P.Price,P.ProImage,P.Stock from Car C inner join Product P on C.ProId=P.ProId where C.UserId={0}", UserId);
dt = SqlHelper.ExecuteDataTable(com.Model.Base.DataBaseEnum.ruanmou, sql, CommandType.Text, null);
cacheManger.Set(CacheKey.GetCarPList_Key(), dt, );
}
return dt;
}

web.config重要节点配置:

 <appSettings>
<add key="CacheType" value="MsCacheManager"/>
<!--<add key="CacheType" value="MemCacheManager"/>-->
</appSettings>
 <configSections>
<section name="dataConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Data.Configuration.DatabaseSettings, Microsoft.Practices.EnterpriseLibrary.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
<section name="cachingConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Caching.Configuration.CacheManagerSettings, Microsoft.Practices.EnterpriseLibrary.Caching, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
<section name="enterpriseLibrary.ConfigurationSource" type="Microsoft.Practices.EnterpriseLibrary.Common.Configuration.ConfigurationSourceSection, Microsoft.Practices.EnterpriseLibrary.Common, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
<section name="memcachedgarden" type="System.Configuration.NameValueSectionHandler"/>
</configSections>
 <cachingConfiguration defaultCacheManager="CachePS">
<cacheManagers>
<add expirationPollFrequencyInSeconds="" maximumElementsInCacheBeforeScavenging="" numberToRemoveWhenScavenging="" backingStoreName="Null Storage" type="Microsoft.Practices.EnterpriseLibrary.Caching.CacheManager, Microsoft.Practices.EnterpriseLibrary.Caching, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" name="CachePS"/>
</cacheManagers>
<backingStores>
<add encryptionProviderName="" type="Microsoft.Practices.EnterpriseLibrary.Caching.BackingStoreImplementations.NullBackingStore, Microsoft.Practices.EnterpriseLibrary.Caching, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" name="Null Storage"/>
</backingStores>
</cachingConfiguration>
<enterpriseLibrary.ConfigurationSource selectedSource="System Configuration Source">
<sources>
<add name="System Configuration Source" type="Microsoft.Practices.EnterpriseLibrary.Common.Configuration.SystemConfigurationSource, Microsoft.Practices.EnterpriseLibrary.Common, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
</sources>
</enterpriseLibrary.ConfigurationSource>
<memcachedgarden>
<add key="CachePS" value="127.0.0.1:11211"/>
</memcachedgarden>

memcached缓存机制+微软缓存机制使用详解的更多相关文章

  1. Spring Boot 2.x基础教程:进程内缓存的使用与Cache注解详解

    随着时间的积累,应用的使用用户不断增加,数据规模也越来越大,往往数据库查询操作会成为影响用户使用体验的瓶颈,此时使用缓存往往是解决这一问题非常好的手段之一.Spring 3开始提供了强大的基于注解的缓 ...

  2. 缓存varnish的管理及配置详解

    一 工作原理 在当前主流的Web服务架构体系中,Cache担任着越来越重要的作用.常见的基于浏览器的C/S架构,Web Cache更是节约服务器资源的关键.而最近几年由FreeBSD创始人之一Kamp ...

  3. 14.LINUX-platform机制实现驱动层分离(详解)

    版权声明:本文为博主原创文章,未经博主允许不得转载. 本节目标:        学习platform机制,如何实现驱动层分离 1.先来看看我们之前分析输入子系统的分层概念,如下图所示: 如上图所示,分 ...

  4. 关于Redis哨兵机制,7张图详解!

    写在前面 之前有位朋友去面试被问到Redis哨兵机制,这道题其实很多小伙伴都应该有被问到过!本文将跟大家一起来探讨如何回答这个问题!同时用XMind画了一张导图记录Redis的学习笔记和一些面试解析( ...

  5. [书目20140902]实战Windows Azure——微软云计算平台技术详解 --徐子岩

    目录第1章  云计算技术简介    1.1  云计算所要解决的问题    1.2  云计算平台的分类    1.3  微软云计算平台Windows Azure        1.3.1  高可用性   ...

  6. Memcached在Linux环境下的使用详解http://blog.51cto.com/soysauce93/1737161

    大纲 一.什么是memcached 二.memcached特性 三.memcached存储方式 四.memcached安装与配置 五.memcached结合php 六.Nginx整合memcached ...

  7. EF+LINQ事物处理 C# 使用NLog记录日志入门操作 ASP.NET MVC多语言 仿微软网站效果(转) 详解C#特性和反射(一) c# API接受图片文件以Base64格式上传图片 .NET读取json数据并绑定到对象

    EF+LINQ事物处理   在使用EF的情况下,怎么进行事务的处理,来减少数据操作时的失误,比如重复插入数据等等这些问题,这都是经常会遇到的一些问题 但是如果是我有多个站点,然后存在同类型的角色去操作 ...

  8. JavaScript解析机制与闭包原理实例详解

    js代码解析机制: js代码解析之前会创建一个如下的词法环境对象(仓库):LexicalEnvironment{ } 在扫描js代码时会把: 1.用声明的方式创建的函数的名字; 2.用var定义的变量 ...

  9. java笔记--反射机制之基础总结与详解

    一.反射之实例化Class类的5种方式: java的数据类型可以分为两类,即引用类型和原始类型(即基本数据类型). 对于每种类型的对象,java虚拟机会实例化不可变的java.lang.Class对象 ...

随机推荐

  1. eclipse scons 使用指南

    http://sconsolidator.com/projects/sconsolidator/wiki/Getting_Started Add SCons support to an existin ...

  2. hadoop2.1.0和hadoop2.2.0编译安装教程

    由于现在hadoop2.0还处于beta版本,在apache官方网站上发布的beta版本中只有编译好的32bit可用,如果你直接下载安装在64bit的linux系统的机器上,运行会报一个INFO ut ...

  3. JS基础DOM篇之二:DOM级别与节点层次?

    通过上一篇我们大致了解了什么是DOM,今天我们继续深入了解. 1.DOM级别       在大家阅读DOM标准的时候,可能会看到DOM(0/1/2/3)级的字眼,这就是DOM级别.但实际上,DOM0级 ...

  4. Volley使用指南第三回(来自developer.android)

    继第二篇之后,再来Volley使用的教程的第三篇,有些翻译我是根据自己的理解,可能有错误的地方,还请多多包涵. 标准请求 这一回课将会告诉你Volley能够完成的3种请求类型 1.StringReqe ...

  5. copy and Xcopy 复制文件到另一地址

    1. copy不能复制文件夹下的文件,而Xcopy可以. 2. Xcopy不能连接文件,而copy可以连接文件 eg : 将A盘中的A.TXT和B.TXT文件连接起来,连接后的文件名为C.TXT    ...

  6. 【M4】非必要不提供default 构造方法

    1.default 构造方法意味着,没有外来信息的情况下,进行初始化,构造出一个对象.对于有些对象是很合理的,比如数值之类的对象,可以初始化为0:对于指针之类的对象,初始化为null:对于集合如vec ...

  7. Java模拟网站登录02【转载】

    如何用Java代码模拟一些如百度.QQ之类的网站登录?有两个方式,一是发送模拟请求,二是模拟浏览器操作,而这两种方式恰好在Java有开源实现,在这里介绍一个工具包,它是家喻户晓的HttpClient. ...

  8. C#操作MySQL数据库-----HelloWorld

    这里采用在visual studio 2010中通过MySql.Data.dll.MySql.Web.dll来连接mysql数据库, 之后便进行数据的插入和查询. Program.cs文件内容如下: ...

  9. 用C#调用Matlab图像处理自制QQ游戏2D桌球瞄准器

    平时不怎么玩游戏,有时消遣就玩玩QQ里的2D桌球,但是玩的次数少,不能像骨灰级玩家一样百发百中,肿么办呢?于是某天突发奇想,决定自己也来做个“外挂”.说是外挂,其实只是一个瞄准器,毕竟外挂是修改别人的 ...

  10. 纯Javascript实现Windows 8 Metro风格实现

    Metro风格设计主要特点 1.Windows 8 Metro风格设计,实现网站或系统功能的导航 2.纯Javascript实现 3.支持所有IE.360.Chrome等常用浏览器 4.支持圆角.阴影 ...