分布式缓存BeIT 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的使用
或许你还没有用到过分布式缓存,在web集群的情况下,它可以很好的让一部分常用数据常驻服务器内存而不用担心各台web不同步。
下面稍微介绍一下memcached对于.net的支持,官方参考
http://code.google.com/p/beitmemcached/
一个完整的操作步骤:
1、点击上面页面的downloads,把Memcached_1.2.5.zip 和BeITMemcached_source_2008_05_31.zip两个压缩包下在下来。
2、解压Memcached_1.2.5.zip ,它是memcached的服务器端。
3、把Memcached_1.2.5复制到你指定的做为缓存服务器的电脑上,比如叫做192.168.0.1。
4、cmd下运行类似命令 'd:\memcached\memcached.exe -d install' 安装服务器端,这时候它应该会出现在windows服务中
5、cmd下运行类似命令 'd:\memcached\memcached.exe -d start'启动服务,看服务器进程中是否有memcached进程。
6、确认服务器端口11211是否开放(防火墙设置中),否则其他机器无法访问
7、服务器端这时已经安装完毕、在其他机器上测试一下,cmd输入telnet 192.168.0.1 11211看能否登录。
8、解压BeITMemcached_source_2008_05_31.zip,它是.net 2.0开发的客户端,里面是全部源代码和一个调用示例。
9、用对应版本的vss打开项目,如果感兴趣就慢慢研究代码,不感兴趣就选择生成类库,编译一个BeITMemcached.dll出来。
10、新建一个控制台程序,引用BeITMemcached.dll,输入类似代码测试
using System; using BeIT.MemCached; namespace ConsoleApplication3 { class Program { static void Main(string[] args) { MemcachedClient.Setup("TestCache", new string[] { "192.168.0.1" }); MemcachedClient cache = MemcachedClient.GetInstance("TestCache"); cache.SendReceieveTimeout = 5000; cache.MinPoolSize = 1; cache.MaxPoolSize = 5; cache.Set("jinjazz", "剪刀"); object obj = cache.Get("jinjazz"); Console.WriteLine(obj); Console.Read(); } } }
一个分布式缓存的例子就这么简单,和操作hashtable基本上一样容易。
11、查看缓存运行状态,这个你需要熟悉一些memcached的基本命令
先在你机器上输入telnet 192.168.0.1 11211,进入telnet
摸黑输入stats,会出来如下结果,可能对你有用的我后面加了注释
STAT pid 2928
STAT uptime 139279
STAT time 1216258406
STAT version 1.2.5
STAT pointer_size 32
STAT curr_items 4
STAT total_items 6
STAT bytes 1052947
STAT curr_connections 2
STAT total_connections 10
STAT connection_structures 4
STAT cmd_get 13//读取13次
STAT cmd_set 6//设置6次
STAT get_hits 11//11次命中
STAT get_misses 2//2次失败
STAT evictions 0
STAT bytes_read 1053321
STAT bytes_written 6279461
STAT limit_maxbytes 67108864
STAT threads 1
END
12、结束。