分布式缓存系统Memcached简介与实践
缘起: 在数据驱动的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 namespace Memcached.MemcachedBench
2 {
3 using System;
4 using System.Collections;
5
6 using Memcached.ClientLibrary;
7
8 public class MemcachedBench
9 {
10 [STAThread]
11 public static void Main(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 = new MemcachedClient();
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 运转结果
跋文: 是个不错的东西 ,使用起来也很方便,php ,ruby 的项目中用这个的很多,但是.net项目中用的较少(恕俺孤陋寡闻) 。希望有兴味的朋友们 多多交流 。 看到页首了么各位兄弟? 不消我多说了吧,摆荡您的鼠标 轻轻按下左键吧
- 文章作者: 福州军威计算机技术有限公司
军威网络是福州最专业的电脑维修公司,专业承接福州电脑维修、上门维修、IT外包、企业电脑包年维护、局域网网络布线、网吧承包等相关维修服务。
版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章原始出处 、作者信息和声明。否则将追究法律责任。
TAG:
评论加载中...
|