Memcached的原理和使用介绍
介绍:
Memcached是国外社区网站LiveJournal的技术团队开发的高性能分布式内存缓存服务器。
使用目的:
memcached的一般使用目的就是缓存数据库查询结果,减少对数据库的访问次数,以提高动态web应用的速度,提高可扩展性。
memcached运行图:
memcached介绍:
谁在使用memcached:
Yahoo,FaceBook,Twitter,MIXI以及wiki百科等国外公司。
国内公司有:
搜狐微博,人人网,赶集网,新浪网等。
与Memcached相似的产品都有哪些:
tokyo Cabinet 日本鬼子的产品
MemcacheDB 新浪开发的产品
sohutw—memcached 搜狐微博的产品
BeansDB 豆瓣的产品
tmcached 黑夜路人的产品
memcached的主要特点:
基于CS架构,协议简单。
基于libEvent的事件处理。
自主内存存储处理。
基于客户端的memcached分布式。
数据存储方式:
1,Slab Allocation
Slab Allocation的方法比较简单,就是按照预先规定的大小,将申请的内存分割成特定大小的块,已解决内存碎片的问题。
其原理就是 将分配的内存分割成各种尺寸的块(chunk),然后把相同尺寸的块组成组(chunk 集合)。
术语表:
Page:分配给slab的内存空间,默认是1Mb,分配给slab之后根据slab的大小切分chunk。
chunk:用于缓存数据的空间。
slab class:chunk的组。很多大小相同的slab组成的chunk。
Slab Allocation的缺点:
由于chunk的大小是固定的,如果128k的chunk存放100k的数据,那么28k的空间就浪费了。
数据过期的方式:
1,lazy Expiration:memcached不会监视记录是否过期,而是在get数据的时候检查数据的时间戳,看是否过期。因此memcached不会再监视数据是否过期上面耽误cpu的时间。
2,LRU 。Least Recently Used,最近最少使用的空间会在空间不足的情况下被释放,让给新数据。
基于客户端的memcached分布式:
根据key值获得key在内存中的地址,*Key++%totalServer = n,n为服务器集群代号为n的机器,把key值存放在此台机器上。从此写入和读取都从这台机器上操作。