风起漂泊 发表于 2018-12-25 11:12:34

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]
查看完整版本: memcached原理详述及配置