memcached缓存机制+微软缓存机制使用详解
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缓存机制+微软缓存机制使用详解的更多相关文章
- Spring Boot 2.x基础教程:进程内缓存的使用与Cache注解详解
随着时间的积累,应用的使用用户不断增加,数据规模也越来越大,往往数据库查询操作会成为影响用户使用体验的瓶颈,此时使用缓存往往是解决这一问题非常好的手段之一.Spring 3开始提供了强大的基于注解的缓 ...
- 缓存varnish的管理及配置详解
一 工作原理 在当前主流的Web服务架构体系中,Cache担任着越来越重要的作用.常见的基于浏览器的C/S架构,Web Cache更是节约服务器资源的关键.而最近几年由FreeBSD创始人之一Kamp ...
- 14.LINUX-platform机制实现驱动层分离(详解)
版权声明:本文为博主原创文章,未经博主允许不得转载. 本节目标: 学习platform机制,如何实现驱动层分离 1.先来看看我们之前分析输入子系统的分层概念,如下图所示: 如上图所示,分 ...
- 关于Redis哨兵机制,7张图详解!
写在前面 之前有位朋友去面试被问到Redis哨兵机制,这道题其实很多小伙伴都应该有被问到过!本文将跟大家一起来探讨如何回答这个问题!同时用XMind画了一张导图记录Redis的学习笔记和一些面试解析( ...
- [书目20140902]实战Windows Azure——微软云计算平台技术详解 --徐子岩
目录第1章 云计算技术简介 1.1 云计算所要解决的问题 1.2 云计算平台的分类 1.3 微软云计算平台Windows Azure 1.3.1 高可用性 ...
- Memcached在Linux环境下的使用详解http://blog.51cto.com/soysauce93/1737161
大纲 一.什么是memcached 二.memcached特性 三.memcached存储方式 四.memcached安装与配置 五.memcached结合php 六.Nginx整合memcached ...
- EF+LINQ事物处理 C# 使用NLog记录日志入门操作 ASP.NET MVC多语言 仿微软网站效果(转) 详解C#特性和反射(一) c# API接受图片文件以Base64格式上传图片 .NET读取json数据并绑定到对象
EF+LINQ事物处理 在使用EF的情况下,怎么进行事务的处理,来减少数据操作时的失误,比如重复插入数据等等这些问题,这都是经常会遇到的一些问题 但是如果是我有多个站点,然后存在同类型的角色去操作 ...
- JavaScript解析机制与闭包原理实例详解
js代码解析机制: js代码解析之前会创建一个如下的词法环境对象(仓库):LexicalEnvironment{ } 在扫描js代码时会把: 1.用声明的方式创建的函数的名字; 2.用var定义的变量 ...
- java笔记--反射机制之基础总结与详解
一.反射之实例化Class类的5种方式: java的数据类型可以分为两类,即引用类型和原始类型(即基本数据类型). 对于每种类型的对象,java虚拟机会实例化不可变的java.lang.Class对象 ...
随机推荐
- Scala List的排序函数sortWith
//原始方法: //val list=List("abc","bcd","cde") scala> list.sortWith( (s ...
- 应用完全启动后, Spring执行自定义初始化
项目中做敏感词过滤, 因为前台ajax校验要走service ,而后台统一过滤器要走interceptor , 所以把检查器提到一个工具类(HeXieWordFinder)里 这个工具类理应缓存数据库 ...
- 电脑蓝屏分析教程,附工具WinDbg(x86 x64)6.12.0002.633下载
我们常常在使用电脑中,有时会碰到电脑蓝屏,我们经常束手无策,不知道为什么会蓝屏?有些蓝屏后自动重启能正常进入系统,那么我们就可以借助工具进行分析.而有些可能需要进入到安全模式或者pe系统才会正常,那么 ...
- 8天玩转并行开发——第一天 Parallel的使用
转自:http://www.cnblogs.com/huangxincheng/archive/2012/04/02/2429543.html 随着多核时代的到来,并行开发越来越展示出它的强大威力,像 ...
- java实现简单的素数判断
素数的这个问题由来已久,大学刚接触语言的时候遇到过找素数的问题,找工作笔试的时候也遇到过素数的问题,今天就特地写这篇博文,缅怀一下. 一.什么是素数? 除了1和它本身以外不再有其他的除数整除. 二.判 ...
- POJ 3522 Slim Span 最小差值生成树
Slim Span Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://poj.org/problem?id=3522 Description Gi ...
- BZOJ 1607: [Usaco2008 Dec]Patting Heads 轻拍牛头 筛法
1607: [Usaco2008 Dec]Patting Heads 轻拍牛头 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://www.lyds ...
- c# 反射学习笔记
首先了解C#反射的概念,反射是一个运行库类型发现的过程.通过反射可以得到一个给定程序集所包含的所有类型的列表, 这个列表包括给定类型中定义的方法.字段.属性和事件.也可以动态的发现一组给定类支持的借口 ...
- show engine innodb status解读
xiaoboluo768 注:以下内容为根据<高性能mysql第三版>和<mysql技术内幕innodb存储引擎>的innodb status部分的个人理解,如果有错误,还 ...
- Haproxy图解
http://blog.csdn.net/tantexian/article/details/50056199