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

Memcached是什么?
Memcached是由Danga Interactive开发的,高性能的,分布式的内存对象缓存系统,用于在动态应用中减少数据库负载,提升访问速度。

Memcached能缓存什么?
通过在内存里维护一个统一的巨大的hash表,Memcached能够用来存储各种格式的数据,包括图像、视频、文件以及数据库检索的结果等。

Memcached快么?

非常快。Memcached使用了libevent(如果可以的话,在linux下使用epoll)来均衡任何数量的打开链接,使用非阻塞的网络I/O,对内部对象实现引用计数(因此,针对多样的客户端,对象可以处在多样的状态), 使用自己的页块分配器和哈希表, 因此虚拟内存不会产生碎片并且虚拟内存分配的时间复杂度可以保证为O(1).。

Danga Interactive为提升Danga Interactive的速度研发了Memcached。目前,LiveJournal.com每天已经在向一百万用户提供多达两千万次的页面访问。而这些,是由一个由web服务器和数据库服务器组成的集群完成的。Memcached几乎完全放弃了任何数据都从数据库读取的方式,同时,它还缩短了用户查看页面的速度、更好的资源分配方式,以及Memcache失效时对数据库的访问速度。

Memcached的特点
Memcached的缓存是一种分布式的,可以让不同主机上的多个用户同时访问, 因此解决了共享内存只能单机应用的局限,更不会出现使用数据库做类似事情的时候,磁盘开销和阻塞的发生。

Memcached的使用 
一 
Memcached服务器端的安装 (此处将其作为系统服务安装)
  下载文件:memcached 1.2.1 for Win32 binaries (Dec 23, 2006)
   1 解压缩文件到c:\memcached
   2 命令行输入 'c:\memcached\memcached.exe -d install' 
   3 命令行输入 'c:\memcached\memcached.exe -d start' ,该命令启动 Memcached ,默认监听端口为 11211
  通过 memcached.exe -h 可以查看其帮助
二   .NET memcached client library
   下载文件:https://sourceforge.net/projects/memcacheddotnet/

里面有.net1.1  和 .net2.0的两种版本  还有一个不错的例子。

三  应用

1 将Commons.dll,ICSharpCode.SharpZipLib.dll,log4net.dll,Memcached.ClientLibrary.dll 等放到bin目录
  2 引用Memcached.ClientLibrary.dll
  3 代码

1 namespaceMemcached.MemcachedBench
2 {
3 usingSystem;
4 usingSystem.Collections;

6 usingMemcached.ClientLibrary;

8 publicclassMemcachedBench 
9 {
10 [STAThread]
11 publicstaticvoidMain(String[] args) 
12 {
13 string[] serverlist ={ "10.0.0.131:11211", "10.0.0.132:11211"};
14 
15 //初始化池
16 SockIOPool pool =SockIOPool.GetInstance();
17 pool.SetServers(serverlist);
18 
19 pool.InitConnections =3;
20 pool.MinConnections =3;
21 pool.MaxConnections =5;
22 
23 pool.SocketConnectTimeout =1000;
24 pool.SocketTimeout =3000;
25 
26 pool.MaintenanceSleep =30;
27 pool.Failover =true;
28 
29 pool.Nagle =false;
30 pool.Initialize();
31 
32 //获得客户端实例
33 MemcachedClient mc =newMemcachedClient();
34 mc.EnableCompression =false;
35 
36 Console.WriteLine("------------测  试-----------");
37 mc.Set("test", "my value");  //存储数据到缓存服务器,这里将字符串"my value"缓存,key 是"test"
38 
39 if(mc.KeyExists("test"))   //测试缓存存在key为test的项目
40 {
41 Console.WriteLine("test is Exists");
42 Console.WriteLine(mc.Get("test").ToString());  //在缓存中获取key为test的项目
43 }
44 else
45 {
46 Console.WriteLine("test not Exists");
47 }
48 
49 Console.ReadLine();
50 
51 mc.Delete("test");  //移除缓存中key为test的项目
52 
53 if(mc.KeyExists("test"))
54 {
55 Console.WriteLine("test is Exists");
56 Console.WriteLine(mc.Get("test").ToString());
57 }
58 else
59 {
60 Console.WriteLine("test not Exists");
61 }
62 Console.ReadLine();
63 
64 SockIOPool.GetInstance().Shutdown();  //关闭池, 关闭sockets
65 }
66 }
67 }

4 运行结果

分布式缓存系统Memcached简介与实践相关推荐

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

    原文:分布式缓存系统Memcached简介与实践(.NET memcached client library) 缘起: 在数据驱动的web开发中,经常要重复从数据库中取出相同的数据,这种重复极大的增加 ...

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

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

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

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

  4. Linux分布式缓存系统——memcached+LAMP环境搭建+监控

    概述 memcached简介 Memcached是一个开源.高性能.分布式内存对象缓存系统. Memcached是一种基于内存的key-value存储,用来存储小块的任意数据(字符串.对象),这些数据 ...

  5. .NET下实现分布式缓存系统Memcached

    [IT168 技术文档]在Web应用程序中,数据通常保存在RDBMS中,应用服务器从数据库中读取数据并在浏览器中显示.但随着数据量的增大.访问的集中,就会出现RDBMS的负载加重.数据库响应变慢.网站 ...

  6. 分布式缓存系统 Memcached 【转载】

    本文转载自 http://www.cnblogs.com/zjneter/archive/2007/07/19/822780.html 缘起: 在数据驱动的web开发中,经常要重复从数据库中取出相同的 ...

  7. java分布式缓存memcached_分布式缓存系统Memcached学习心得

    缘起: 在数据驱动的web开发中,经常要重复从数据库中取出相同的数据,这种重复极大的增加了数据库负载.缓存是解决这个问题的好办法. Memcached是什么? Memcached是由Danga Int ...

  8. 分布式缓存系统 Memcached CAS协议

    Memcached在1.2.4版本后新增了CAS(Check and Set)协议,主要用于并发控制:memcached中同一个item同时被多个线程(多个客户端)更改的并发问题.CAS协议最本质的东 ...

  9. 支持.NET的分布式缓存系统memcached

    http://www.infoq.com/news/2007/07/memcached 转载于:https://www.cnblogs.com/didasoft/archive/2007/07/17/ ...

最新文章

  1. esp32 python-在esp32上配置运行microPython
  2. css3中实现摘取金币_用css3实现抽奖转盘里的扇形图
  3. [OS复习]虚拟存储管理技术2
  4. 【Q】之防火墙的SNAT DANT原理应用
  5. ss模型复模态的物理意义及adams复模态振型求解
  6. 如何解决Error: failed PB timebomb check
  7. 企业内网巡航扫描神器
  8. pytorch总结(一)torch.nn模块使用详解
  9. PCL入门系列 —— 加载obj格式mesh模型、点云数据并作纹理模型TextureMesh可视化
  10. 无线路由桥接关掉服务器要怎么办,路由器设置无线桥接后不能登录副路由器怎么办?...
  11. 双系统怎么给Linux扩容,linux/win 双系统环境下为linux扩容
  12. 教你如何刻录极品CD音乐碟
  13. 计算机网络中表征数据传输有效性的指标是,表征数据传输有效性的指标是
  14. 镁光闪存颗粒对照表_详解闪存颗粒的种类
  15. 使用TS开发小程序中遇到的问题
  16. python画三维坐标图像_用python检索xyz坐标并绘制三维图形
  17. pta习题:退休日期推算
  18. 都有哪些语言是跨平台的?
  19. MyEclipse 2016 Windows/Linux/Mac 版下载地址
  20. 为什么懂得很多道理,却依然过不好这一生

热门文章

  1. kissy core
  2. 实战之网马解密之shellcode篇
  3. MFC中利用CFileDialog选择文件并读取文件所遇到的问题和解决方法
  4. .net core 2.0 部署到centos 7生产环境
  5. windows7/8 安装mysql5.7
  6. 'libxml/tree.h' file not found
  7. 分形之闵可夫斯基(Minkowski)
  8. JavaScript中变量的相互引用
  9. 运维工程师的职责和前景
  10. 超酷flash光芒光线特效