Memcached学习

1、Memcached介绍

Memcached是一个分布式的对象缓存系统,它是基于Key-Value的Hashmap。
Memcached没有认证机制和安全保护,是运行在防火墙后面。
Memcached可以运行在多进程中,可以实现分布式(Redis是运行在单核)。memcached尽管是“分布式”缓存服务器,但服务器端并没有分布式功能。 各个memcached不会互相通信以共享信息。那么,怎样进行分布式呢? 这完全取决于客户端的实现。

从图中也可以看到,Memcached的分布式是在客户端实现的。如客户端在set数据时,客户端会采用某种算法根据Key值将数据分配到某一Memcached服务器上,同样在get数据时,也会根据同样算法从相应的服务器上取出数据。这种分布式是Memcached的最大特点,如果有一个Memcached服务器down掉了,也不会影响其他缓存。

2、内存分配机制:

采用预分配内存的机制,事先分配好内存,然后根据value值选择合适的内存空间。这种机制叫做Slab Allocation,就是为了避免出现内存碎片。
该机制分配的内存空间默认是1MB,然后再根据slab大小划分。
虽然该机制很有效解决了内存碎片,但是它也随着引来了缺陷,主要的是因为是内存预分配,所以很有可能造成内存的浪费。比如数据大小是98KB,预分配大小为128KB,那么其中的30KB就浪费掉了。
那如何解决这个问题呢?只要通过调整Memcached中的Growth Factor因子,该因子设定了不同的slab之间的内存大小差异,说白了就像是数学里面的等差数列。每一项就是不同的slab,slab之间的差异就是那个公差。把因子调小一点,使得slab之间的差异变小,就可以一定程度减小内存的浪费。

3、淘汰数据机制:

1、超时

Memcached也有过期机制,但是它并不是一直去监控数据的过期时间,它只是在你GET数据的时候,会检查数据的时间戳,看是否过期。这叫做Lazy Expiration。

2、LRU机制

LRU,全称Least Recently Used,即最近最少使用。当memcached的内存空间不足时(无法从slab class 获取到新的空间时),就从最近未被使用的记录中搜索,并将其空间分配给新的记录。

4、字节约束

Memcached的Key长度最大为250字节, Value最长是1MB。

5、存储数据类型

memcache只能存储字符串与数组,字符串直接存储,数组自动序列化后存储

文件,图片,视频需要打成二进制后再存储, 资源连接不能保存。

总结:Memcached在本质上和NoSQL差不多,都是Key-value的存储方式,其最大的特点就是将数据完全存储在内存中,数据交互速度较快。

--------EOF---------
微信分享/微信扫码阅读