memcached原理详述及配置
如果一个网站流量很大,则查询数据库将会耗费大量时间。如果将经常查询的的数据和对象缓存到内存中,则需要查询数据库时,直接返回内存中缓存的数据。这中静态化方式则会高效很多。分布式缓存系统是为了解决数据库服务器和web服务器直接的瓶颈。其中memcached是一个开源、高性能、分布式的内存对象缓存系统。主要通过在内存中缓存数据和对象减轻数据库的负载来加速动态web程序。内存中缓存的数据通过API的方式被存取,数据就像一张大的HASH表,以键-值对方式存在。
http://s3.运维网.com/wyfs02/M01/6D/8D/wKiom1VlqXfDGk0RAADGGlK5jsk765.jpg
读取
执行读取操作的顺序是从 Web 层获取请求(需要执行一次数据库查询)并检查之前在缓存中存储的查询结果。如果我找到所需的值,则返回它。如果未找到,则执行查询并将结果存储在缓存中,然后再将结果返回给 Web 层。
写入
将数据写入到数据库中时,首先需要执行数据库写入操作,然后将之前缓存的任何受此写入操作影响的结果设定为无效。此过程有助于防止缓存和数据库之间出现数据不一致性。
Memcached采用client/server架构,服务端启动守护进程,等待clent请求到达,采用异步I/O,使用libevenet作为事件通知机制。可以建设多个服务端协同工作,但这些服务端之间并不通信,每个server端对自己的数据进行管理,客户端制定server端IP和端口进行通信。缓存在内存中的数据并不会同步到磁盘上,因此,重启后缓存的数据就会丢失。当缓存数据的总大小达到初始设置值时,就会使用LRU算法删除不用的缓存。
Memcached采用slaballocation机制分配和管理内存,其原理是将内存分割成各种尺寸的块chunk,Chunk就是用来存储key-value数据的最小单位,把尺寸相同的块分成组(slab class) ,每个slab class的大小可以在memcached启动时制定GrowethFactor控制,默认值为1.25。这些内存块不会释放,可重复利用。
可同过以下命令看到slab class生成过程:
#/usr/local/memcached/bin/memcached -d -f 1.25 -n 50 -vvv -u nobody
slabclass 1: chunk size 104 perslab 10082
slabclass 2: chunk size 136 perslab 7710
slabclass 3: chunk size 176 perslab 5957
slabclass 4: chunk size 224 perslab 4681
slabclass 5: chunk size 280 perslab 3744
slabclass 6: chunk size 352 perslab 2978
slabclass 7: chunk size 440 perslab 2383
slab class 8: chunk size 552 perslab 1899
slabclass 9: chunk size 696 perslab 1506
slabclass10: chunk size 872 perslab 1202
slabclass11: chunk size 1096 perslab 956
slabclass12: chunk size 1376 perslab 762
slabclass13: chunk size 1720 perslab 609
slabclass14: chunk size 2152 perslab 487
slabclass15: chunk size 2696 perslab 388
slabclass16: chunk size 3376 perslab 310
slabclass17: chunk size 4224 perslab 248
slabclass18: chunk size 5280 perslab 198
slabclass19: chunk size 6600 perslab 158
slabclass20: chunk size 8256 perslab 127
slabclass21: chunk size 10320 perslab 101
slabclass22: chunk size 12904 perslab 81
slabclass23: chunk size 16136 perslab 64
slabclass24: chunk size 20176 perslab 51
slabclass25: chunk size 25224 perslab 41
slabclass26: chunk size 31536 perslab 33
slabclass27: chunk size 39424 perslab 26
slabclass28: chunk size 49280 perslab 21
slabclass29: chunk size 61600 perslab 17
slabclass30: chunk size 77000 perslab 13
slabclass31: chunk size 96256 perslab 10
slabclass32: chunk size 120320 perslab 8
slabclass33: chunk size 150400 perslab 6
slabclass34: chunk size 188000 perslab 5
slabclass35: chunk size 235000 perslab 4
slabclass36: chunk size 293752 perslab 3
slabclass37: chunk size 367192 perslab 2
slabclass38: chunk size 458992 perslab 2
slabclass39: chunk size 573744 perslab 1
slabclass40: chunk size 717184 perslab 1
slabclass41: chunk size 1048576 perslab 1
页:
[1]