专注于互联网--专注于架构

最新标签
网站地图
文章索引
Rss订阅

首页 »编程综合 » memcached:分布式缓存Cache系统Memcached介绍和实战 »正文

memcached:分布式缓存Cache系统Memcached介绍和实战

来源: 发布时间:星期四, 2009年1月15日 浏览:42次 评论:0
  缘起: 在数据驱动web开发中经常要重复从数据库中取出相同数据这种重复极大增加了数据库负载缓存Cache是解决这个问题好办法但是ASP.NET中虽然已经可以实现对页面局部进行缓存Cache但还是不够灵活此时Memcached或许是你想要

  Memcached是什么?

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

  Memcached能缓存Cache什么?

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

  Memcached快么?

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

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

  Memcached特点

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

  Memcached使用

   Memcached服务器端安装 (此处将其作为系统服务安装)

  下载文件:memcached 1.2.1 for Win32 binaries (Dec 23, 2006)

  1 解压缩文件到c:memcached

  2命令行输入 'c:memcachedmemcached.exe -d '

  3 命令行输入 'c:memcachedmemcached.exe -d start'该命令启动 Memcached 默认监听端口为 11211

  通过 memcached.exe -h 可以查看其帮助

   2  .NET memcached client library

  下载文件:http://sourceforge.net/projects/memcacheddotnet/

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

   3 应用

  1 将Commons.dllICSharpCode.SharpZipLib.dlllog4net.dllMemcached.ClientLibrary.dll 等放到bin目录

  2 引用Memcached.ClientLibrary.dll

  3 代码

1Memcached.MemcachedBench
2{
3  using;
4  using.Collections;
5
6  usingMemcached.ClientLibrary;
7
8  publicMemcachedBench
9  {
10    [STAThread]
11    publicvoidMain(Stringargs)
12    {
13      serverlist={"10.0.0.131:11211","10.0.0.132:11211"};
14
15      //化池
16      SockIOPoolpool=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.MaenanceSleep=30;
27      pool.Failover=true;
28
29      pool.Nagle=false;
30      pool.Initialize;
31
32      //获得客户端例子
33      MemcachedClientmc=MemcachedClient;
34      mc.EnableCompression=false;
35
36      Console.WriteLine("------------测 试-----------");
37      mc.Set("test","myvalue"); //存储数据到缓存Cache服务器这里将串"myvalue"缓存Cachekey是"test"
38
39      (mc.KeyExists("test")) //测试缓存Cache存在key为test项目
40      {
41        Console.WriteLine("testisExists");
42        Console.WriteLine(mc.Get("test").); //在缓存Cache中获取key为test项目
43      }
44      
45      {
46        Console.WriteLine("testnotExists");
47      }
48
49      Console.ReadLine;
50
51      mc.Delete("test"); //移除缓存Cache中key为test项目
52
53      (mc.KeyExists("test"))
54      {
55        Console.WriteLine("testisExists");
56        Console.WriteLine(mc.Get("test").);
57      }
58      
59      {
60        Console.WriteLine("testnotExists");
61      }
62      Console.ReadLine;
63      
64      SockIOPool.GetInstance.Shutdown; //关闭池关闭s
65    }
66  }
67}




  4 运行结果



  后记: 是个不错东西 使用起来也很方便php ,ruby 项目中用这个很多但是.net项目中用较少(恕俺孤陋寡闻) 希望有兴趣朋友们 多多交流



0

相关文章

读者评论

发表评论

  • 昵称:
  • 内容: