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对象 ...
随机推荐
- [转载代码]VB.NET 中查询 Linq to SQL 执行时的SQL语句
在搜索使用LINQ TO SQL 添加数据后获得自增长ID的方法时,发现C#可以使用DebuggerWritter把使用Linq to SQL执行的SQL语句显示到即时窗口,于是在网上搜索到在VB.N ...
- 连接查询中on and和on where的区别
一.区别 1. and条件是在生成临时表时使用的条件,它不管and中的条件是否为真,都会返回左(或者右)边表中的记录. 2.where条件是在临时表生成好后,再对临时表进行过滤的条件.这时已经没有le ...
- Eclipse10大快捷键组合
一个Eclipse骨灰级开发者总结了他认为最有用但又不太为人所知的快捷键组合.通过这些组合可以更加容易的浏览源代码,使得整体的开发效率和质量得到提升. Ctrl+Shift+C 快速单行注释 也适用于 ...
- IPv6 sokcet 编程
IPv6的数据包包头与IPv4的数据包头不一样,所以在IPv6下的socket编程用到的某些结构体和地址转换函数也与IPv4下的socket编程不一样.涉及的结构体有:IPv4中使用sockaddr/ ...
- ASP.NET MVC 验证
- 设计模式六大原则——合成/聚合复用原则(CARP)
1.定义 简而言之,对于合成/聚合复用原则的定义就是:要尽量使用合成和聚合,尽量不要使用继承. 2.释义 为什么"要尽量使用合成和聚合.尽量不要使用继承"呢? 这是由于: 第一,继 ...
- 以C#编写的Socket服务器的Android手机聊天室Demo
内容摘要 1.程序架构 2.通信协议 3.服务器源代码 4.客户端源代码 5.运行效果 一.程序架构 在开发一个聊天室程序时,我们可以使用Socket.Remoting.WCF这些具有双向通信的协议或 ...
- nginx 学习八 高级数据结构之基数树ngx_radix_tree_t
1 nginx的基数树简单介绍 基数树是一种二叉查找树,它具备二叉查找树的全部长处:检索.插入.删除节点速度快,支持范围查找.支持遍历等. 在nginx中仅geo模块使用了基数树. nginx的基数树 ...
- SSL工作原理
关键词:SSL,PKI,MAC 摘 要:SSL利用数据加密.身份验证和消息完整性验证机制,为基于TCP等可靠连接的应用层协议提供安全性保证.本文介绍了SSL的产生背景.安全机制.工作过程及典型组 ...
- mysql 5.7.12 新增 X plugin 详解
https://dev.mysql.com/doc/refman/5.7/en/document-store.html 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息 ...