什么是Memcache?
Memcache是一种高性能分布式内存缓存服务器,用来缓存数据库的查询结果,减少数据库的访问,从而减轻数据库压力。
工作机制
Memcache的工作机制是在内存中开辟一块空间,然后建立起一个HashTable,Memcached管理这个HashTable,因此,Memcache可以使用非阻塞的网络IO,应对很多链接。
Memcache的数据对象
Memcache存取的对象都是以key-value的形式存储在服务器端内存中,所以这也是Memcache可以高效存取的原因,但是这样存储的数据不是持久的,一段服务停止,数据则全部丢失。memcache的value值可以包括字符串,数组,数值,布尔,对象,二进制数据和null.
工作原理
1.Memcache采用c/s模式,使用TCP链接与服务器通信,Memcached是以守护程序方式运行于一个或多个服务器中,随时接受客户端的链接操作。
2.存储数据对象时,key的值通过hash进行转换,根据hash值把value传递到对应的server上。
3.当需要获取对象数据时,也是根据key进行hash,通过hash值可以确定被保存在了哪台server上,然后再想该server发出请求。Client端只需要知道保存的key就可以知道再哪台服务器上保存的值。
4.Memcache允许多个Server协同工作,但这些Server之间没有任何通讯,每个server只是对自己的数据进行管理。
数据存储方式
Slab Allocation存储方式,Slab Allocation的基本原理是将分配得到的内存按预先规定好的大小分割成一些特定长度的块(chunk),并按长度把长度相同的块分别组成组(chunk集合)
Slab Classes分配图
Page:分配给slab的空间,默认是1MB,分配后被切割成chunk。
Chunk:用于缓存记录内存的空间。
Slab Class:特定大小的chunk组。
Memcached根据数据大小选择最合适的slab。
Memcached中存储着空间chunk列表,并根据列表选择chunk。但是这样做的后果是chunk中剩余的内存会被闲置。
Memcache数据过期方式
Lazy Expiration
Memcache内部不会监视记录是否过期,而是在get数据时查看记录的时间戳是否过期,这种技术成为Lazy Expiration.因此,Memcached不会在过期监视上耗费CPU时间。Memcache的默认最大数据过期时间是30天。
LRU
Memcached会优先使用已超时的记录的空间。但即使如此,也会发生追加新纪录时空间不足的情况,此时就要使用名为Least Recently Used(LRU)机制来分配空间。因此当空间不足时,就会删除“最近最少使用”的数据,把它们的空间用于新数据的存储。