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. [转载代码]VB.NET 中查询 Linq to SQL 执行时的SQL语句

    在搜索使用LINQ TO SQL 添加数据后获得自增长ID的方法时,发现C#可以使用DebuggerWritter把使用Linq to SQL执行的SQL语句显示到即时窗口,于是在网上搜索到在VB.N ...

  2. 连接查询中on and和on where的区别

    一.区别 1. and条件是在生成临时表时使用的条件,它不管and中的条件是否为真,都会返回左(或者右)边表中的记录. 2.where条件是在临时表生成好后,再对临时表进行过滤的条件.这时已经没有le ...

  3. Eclipse10大快捷键组合

    一个Eclipse骨灰级开发者总结了他认为最有用但又不太为人所知的快捷键组合.通过这些组合可以更加容易的浏览源代码,使得整体的开发效率和质量得到提升. Ctrl+Shift+C 快速单行注释 也适用于 ...

  4. IPv6 sokcet 编程

    IPv6的数据包包头与IPv4的数据包头不一样,所以在IPv6下的socket编程用到的某些结构体和地址转换函数也与IPv4下的socket编程不一样.涉及的结构体有:IPv4中使用sockaddr/ ...

  5. ASP.NET MVC 验证

  6. 设计模式六大原则——合成/聚合复用原则(CARP)

    1.定义 简而言之,对于合成/聚合复用原则的定义就是:要尽量使用合成和聚合,尽量不要使用继承. 2.释义 为什么"要尽量使用合成和聚合.尽量不要使用继承"呢? 这是由于: 第一,继 ...

  7. 以C#编写的Socket服务器的Android手机聊天室Demo

    内容摘要 1.程序架构 2.通信协议 3.服务器源代码 4.客户端源代码 5.运行效果 一.程序架构 在开发一个聊天室程序时,我们可以使用Socket.Remoting.WCF这些具有双向通信的协议或 ...

  8. nginx 学习八 高级数据结构之基数树ngx_radix_tree_t

    1 nginx的基数树简单介绍 基数树是一种二叉查找树,它具备二叉查找树的全部长处:检索.插入.删除节点速度快,支持范围查找.支持遍历等. 在nginx中仅geo模块使用了基数树. nginx的基数树 ...

  9. SSL工作原理

    关键词:SSL,PKI,MAC 摘    要:SSL利用数据加密.身份验证和消息完整性验证机制,为基于TCP等可靠连接的应用层协议提供安全性保证.本文介绍了SSL的产生背景.安全机制.工作过程及典型组 ...

  10. mysql 5.7.12 新增 X plugin 详解

     https://dev.mysql.com/doc/refman/5.7/en/document-store.html   原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息 ...