Memcached 是一个高性能的分布式内存对象缓存系统。用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来降低读取数据库的次数,从而提高动态、数据库驱动站点的速度。

Memcached基于一个存储键/值对的hashmap。其守护进程(daemon
)是用C写的。可是client能够用不论什么语言来编写,并通过memcached协议与守护进程通信。

站下的session性能并不高,所以造成人们一种印象,大型WEB项目使用JAVA的错觉,致使非常多人吐槽微软不给力,事实上这好比拉不出怪地球引力,本文介绍Memcached在ASP.net Web项目中的应用,智联招聘,招商银行,农业银行等都是採用解决方式,在性能上是绝对不亚于不论什么大型站点.同一时候Memcached还能非常方便建立起server集群,对于大型解决方式,server集群的重要性不言而喻;

1.准备工作.

要在项目中使用到Memcached,须要准备好例如以下条件:

server环境:安装Memcached服务到server上

a.下载Memcached安装文件

b.以管理员身份执行CMD 在下载的Memcached服务安装路径下安装Memcached服务(命令行:X:\memcached.exe -d install)

C.检查服务安装



d.启动服务 命令行 memcached.exe –d start  当然能够直接在计算机服务管理来操作

到这里Memcached服务就搭建完毕了,那么怎样运用到.NET项目中区呢?

2.下载.NET Memcached lbr

从文件..trunk\clientlib\src\clientlib\bin\2.0\Debug下拷贝出4个DLL文件Commons.dll,ICSharpCode.SharpZipLib.dll,log4net.dll,Memcached.ClientLibrary.dll,加入引用到项目中去

3.初始化Memcached

从“服务”中能够看到Memcached Server处于“正在执行”的状态中,假设是停止的。右键“启动服务”就能够了,当然能够memcached.exe –d start来启动

基本的缓存代码:

using System;
using System.Data;
using System.Web;
using Memcached.ClientLibrary; public class Cache_Info
{
private readonly static string CacheKey = "Info_key"; /// <summary>
/// 缓存是否存在
/// </summary>
/// <param name="pMC"></param>
/// <param name="pKey"></param>
/// <returns></returns>
private static bool IsCache(MemcachedClient pMC,string pKey)
{
if (pMC.KeyExists(pKey))
{
return true;
}
else
{
return false;
}
} /// <summary>
/// 覆盖缓存
/// </summary>
/// <param name="pKey"></param>
/// <param name="pObject"></param>
/// <returns></returns>
private static bool StoreCache(string pKey,object pObject)
{
MemcachedClient mc = new MemcachedClient();
mc.EnableCompression = true;
bool _result = false;
if (IsCache(mc, pKey))
{
if (mc.Get(pKey) == null)
{
mc.Set(pKey, pObject);//缓存存在。强行覆盖
}
else
{
mc.Replace(pKey, pObject);//缓存存在。强行覆盖
}
_result = true;
}
else
{
mc.Add(pKey, pObject);//第一次载入缓存
_result = true;
}
return _result;
} /// <summary>
/// 清除缓存
/// </summary>
/// <param name="pKey"></param>
/// <returns></returns>
public static bool RemoveCache(string pKey)
{
MemcachedClient mc = new MemcachedClient();
mc.EnableCompression = true;
return mc.Delete(pKey);
} /// <summary>
/// 获取数据
/// </summary>
/// <returns></returns>
public static DataTable GetInfo()
{
#region 通过缓存来获取DataTable的数据
MemcachedClient mc = new MemcachedClient();
mc.EnableCompression = true;
if (mc.Get(CacheKey) != null)
{
return mc.Get(CacheKey) as DataTable; //直接从缓存取数据
}
else
{
DataTable dt=DB_Info.GetInfo(); //第一次载入将数据存入缓存中
if (StoreCache(CacheKey, dt))
{
return mc.Get(CacheKey) as DataTable;
}
else
{
return null;
}
}
#endregion #region 直接从数据库获取DataTable
//return DB_Info.GetInfo();
#endregion } }

代码下载地址:

Memcached

分布式缓存系统Memcached在Asp.net下的应用的更多相关文章

  1. [Memcached]分布式缓存系统Memcached在Asp.net下的应用

    Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的速度.Memcached ...

  2. 分布式缓存系统 Memcached 整体架构

    分布式缓存系统 Memcached整体架构 Memcached经验分享[架构方向] Memcached 及 Redis 架构分析和比较

  3. 分布式缓存系统Memcached简介与以及在.net下的实践(转)

    缘起: 在数据驱动的web开发中,经常要重复从数据库中取出相同的数据,这种重复极大的增加了数据库负载.缓存是解决这个问题的好办法.但是ASP.NET中的虽然已经可以实现对页面局部进行缓存,但还是不够灵 ...

  4. 分布式缓存系统Memcached简介与实践

    缘起: 在数据驱动的web开发中,经常要重复从数据库中取出相同的数据,这种重复极大的增加了数据库负载.缓存是解决这个问题的好办法.但是ASP.NET中的虽然已经可以实现对页面局部进行缓存,但还是不够灵 ...

  5. 分布式缓存系统Memcached简介与实践(.NET memcached client library)

    缘起: 在数据驱动的web开发中,经常要重复从数据库中取出相同的数据,这种重复极大的增加了数据库负载.缓存是解决这个问题的好办法.但是ASP.NET中的虽然已经可以实现对页面局部进行缓存,但还是不够灵 ...

  6. (转)C# 中使用分布式缓存系统Memcached

    转自:http://blog.csdn.net/devgis/article/details/8212917 缘起: 在数据驱动的web开发中,经常要重复从数据库中取出相同的数据,这种重复极大的增加了 ...

  7. 高性能缓存系统Memcached在ASP.NET MVC中应用

    在Memcached中实体类型未经序列化不能在Memcached中缓存,因此需要对实体类进行处理,才能缓存下来. Memcached是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库 ...

  8. php分布式缓存系统 Memcached 入门

    Memcached 是一个分布式的缓存系统, 但是 Memcachd 到底是什么意思,有什么作用呢?缓存一般用来保存一些经常被存取的数据和资源(例如:浏览器会将访问过的网页会话缓存起来),因为通过缓存 ...

  9. 分布式缓存系统Memcached[分享]

    个人网站:http://www.51pansou.com memcached视频下载:memcached视频教程 memcached源码下载:memcached源码 Memcached是什么? Mem ...

随机推荐

  1. 再议js的传递和深复制

    病理 基本类型的传递就是按值传递,比如说 var a = 1; var b = a; b = 3; console.log(a,b);//1,3 很明显,a的值并未因为b的值改变而变化,这是因为a只是 ...

  2. php 生成二维码(qrcode)

    可以用composer安装 https://packagist.org/packages/endroid/qrcode

  3. TP5:使用了INPUT函数来接收参数了,还需再过滤SQL注入吗

    TP5:使用了INPUT函数来接收参数了,还需再过滤SQL注入吗,默认的INPUT函数都做了哪些动作啊 有了PDO参数绑定 基本上不需要考虑sql注入的问题(除非自己拼接SQL),需要考虑的是XSS方 ...

  4. CentOS下的日志切割

    在Linux下,日志会不停的增长,为了防止日志文件过大,导致我们无法在日志中快速找到想要的信息,我们会定时对日志文件进行切割.在这里我将使用logrotate切割日志. (1).logrotate的配 ...

  5. Ajax与传统Web开发的区别

    基本概念 1.1,Ajax AJAX:即“Asynchronous Javascript And XML”(异步的JavaScript和XML),是指一种创建交互式网页应用的网页开发技术,尤其是在一种 ...

  6. [ 转载 ] Java基础14--创建线程的两个方法

    http://www.cnblogs.com/whgw/archive/2011/10/03/2198506.html Java提供了线程类Thread来创建多线程的程序.其实,创建线程与创建普通的类 ...

  7. 02-c#基础之01-基础语法(一)

    1.注释符 1)注销 2) 解释 2.C#中的3种注释符 1)单行注释// 2)多行注释/*要注释的内容*/ 3)文档注释///多用来解释类或者方法 2.VS中的快捷键

  8. Atcoder681 Typical DP Contest E.数 数位dp

    写什么递归....非递归多好写 令$f[i][j]$表示前$i$位的和在模$d$意义下为$j$的方案数,然后转移即可 复杂度$O(10000 * 100 * 10)$ 注意非递归建议高位摆第$n$位. ...

  9. 【POJ】1862:Stripies【贪心】【优先队列】

    Stripies Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 20456   Accepted: 9098 Descrip ...

  10. noip 1995 灯的排列问题 排列组合 DFS

    题目描述 设在一排上有N个格子(N≤20),若在格子中放置有不同颜色的灯,每种灯的个数记为N1,N2,……Nk(k表示不同颜色灯的个数). 放灯时要遵守下列规则: ①同一种颜色的灯不能分开: ②不同颜 ...