Memcache 报告
目录 <ul><li>关于 Memcache </li></ul><ul><li>Memcached 基础 </li></ul><ul><ul><li>协议与命令 </li></ul></ul><ul><ul><li>配置选项 </li></u...
关于 Memcache <ul><li>通用的分布式内存缓存系统软件 </li></ul><ul><li>知名用户: LiveJournal, Wikipedia, Flickr, Bebo, Twitter, Typepad, Yellowb...
组织结构 <ul><li>客户端软件 </li></ul><ul><li>基于客户端的 hash 算法 </li></ul><ul><li>服务器软件 </li></ul><ul><li>服务端算 法 </li></ul>
设计理念 <ul><li>简单 Key/Value 存储   </li></ul><ul><li>取巧设计 :  一半在客户端,另一半在服务端 </li></ul><ul><li>服务器之间不通信   </li></ul><ul><li>忘记数...
协议与命令 <ul><li>存储命令 </li></ul><ul><ul><li>set 、 add 、 replace 、 append 、 prepend 、 cas </li></ul></ul><ul><li>读取命令 </li></u...
存储命令 <ul><li>请求 </li></ul><ul><li><command name> <key> <flags> <exptime> <bytes> [noreply]rn </li></ul><ul><li>cas <key> <...
读取命令 <ul><li>请求 </li></ul><ul><li>get <key>*rn </li></ul><ul><li>gets <key>*rn </li></ul><ul><li>&quot;ENDrn&quot; </li></...
删除命令 <ul><li>请示 </li></ul><ul><li>delete <key> [noreply]rn </li></ul><ul><li>响应 </li></ul><ul><li>&quot;DELETEDrn &quot; <...
自增 / 自减命令 <ul><li>请示 </li></ul><ul><li>incr <key> <value> [noreply]rn </li></ul><ul><li>decr <key> <value> [noreply]rn </l...
统计命令 <ul><li>请示 </li></ul><ul><li>statsrn </li></ul><ul><li>stats <args>rn </li></ul><ul><ul><li>Settings </li></ul></ul><...
配置选项 <ul><li>-m:  设置最大内存容量 </li></ul><ul><li>-M:  如果内存不足,报错 </li></ul><ul><li>-c:  最大连接数 </li></ul><ul><li>-f: slab 数据块增长因...
主要数据结构及算法
当前版 item 结构
当前版 slabclass_t 结构
内部 Hash 机制
Memcache 的分布式
Memcache 的分布式 [set]
Memcache 的分布式 [get]
一致性 HASH <ul><li>servers = ['server1:11211', 'server2:11211', 'server3:11211'] </li></ul><ul><li>server_for_key(key) = ser...
一致性 HASH
一致性 HASH [new node]
Memcached 的内存管理 <ul><li>先为分配相应的大块内存,在在上面进行无缝小对象填充 </li></ul><ul><li>懒惰检测机制, Memcached 不花过多的时间在检测各个 item 对象是否超时,当 get 获取数据时...
Slab Allocation 机制
推荐读物和引用 <ul><li>Memcached Study -  http://www.slideshare.net/puny/memcached-study-presentation </li></ul><ul><li>Memcache ...
Upcoming SlideShare
Loading in...5
×

Memcache

967

Published on

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
967
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
11
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Memcache

  1. 1. Memcache 报告
  2. 2. 目录 <ul><li>关于 Memcache </li></ul><ul><li>Memcached 基础 </li></ul><ul><ul><li>协议与命令 </li></ul></ul><ul><ul><li>配置选项 </li></ul></ul><ul><ul><li>主要数据结构及算法 </li></ul></ul><ul><li>Memcache 的分布式 </li></ul><ul><li>Memcached 的内存管理 </li></ul><ul><li>推荐读物及引用 </li></ul>
  3. 3. 关于 Memcache <ul><li>通用的分布式内存缓存系统软件 </li></ul><ul><li>知名用户: LiveJournal, Wikipedia, Flickr, Bebo, Twitter, Typepad, Yellowbot, YouTube, Digg, Wordpress.com, Craigslist, Mixi </li></ul>http://www.memcached.org http://github.com/memcached/memcachd http://code.google.com/p/memcached/ LiveJoural 的技 术团队 Danga 开 发维护 , 于 2003 由 Brad Fitzpatrick 编 写 发 布第一版 目前 稳 定版是 1.4.5 (2010-4-3)
  4. 4. 组织结构 <ul><li>客户端软件 </li></ul><ul><li>基于客户端的 hash 算法 </li></ul><ul><li>服务器软件 </li></ul><ul><li>服务端算 法 </li></ul>
  5. 5. 设计理念 <ul><li>简单 Key/Value 存储 </li></ul><ul><li>取巧设计 : 一半在客户端,另一半在服务端 </li></ul><ul><li>服务器之间不通信 </li></ul><ul><li>忘记数据是一个特性 </li></ul>
  6. 6. 协议与命令 <ul><li>存储命令 </li></ul><ul><ul><li>set 、 add 、 replace 、 append 、 prepend 、 cas </li></ul></ul><ul><li>读取命令 </li></ul><ul><ul><li>get 、 gets </li></ul></ul><ul><li>其他命令 </li></ul><ul><ul><li>flush_all 、 version 、 verbosity 、 quit </li></ul></ul><ul><li>错误信息 </li></ul><ul><ul><li>&quot;ERRORrn &quot; </li></ul></ul><ul><ul><li>&quot;CLIENT_ERROR <error>rn” </li></ul></ul><ul><ul><li>&quot;SERVER_ERROR <error>rn&quot; </li></ul></ul>
  7. 7. 存储命令 <ul><li>请求 </li></ul><ul><li><command name> <key> <flags> <exptime> <bytes> [noreply]rn </li></ul><ul><li>cas <key> <flags> <exptime> <bytes> <cas unique> [noreply]rn </li></ul><ul><li><data block>rn </li></ul><ul><li>响应 </li></ul><ul><li>&quot;STOREDrn&quot; </li></ul><ul><li>&quot;NOT_STOREDrn&quot; </li></ul><ul><li>&quot;EXISTSrn” </li></ul><ul><li>&quot;NOT_FOUNDrn&quot; </li></ul>
  8. 8. 读取命令 <ul><li>请求 </li></ul><ul><li>get <key>*rn </li></ul><ul><li>gets <key>*rn </li></ul><ul><li>&quot;ENDrn&quot; </li></ul><ul><li>响应 </li></ul><ul><li>VALUE <key> <flags> <bytes> [<cas unique>]rn </li></ul><ul><li><data block>rn </li></ul>
  9. 9. 删除命令 <ul><li>请示 </li></ul><ul><li>delete <key> [noreply]rn </li></ul><ul><li>响应 </li></ul><ul><li>&quot;DELETEDrn &quot; </li></ul><ul><li>&quot;NOT_FOUNDrn&quot; </li></ul>
  10. 10. 自增 / 自减命令 <ul><li>请示 </li></ul><ul><li>incr <key> <value> [noreply]rn </li></ul><ul><li>decr <key> <value> [noreply]rn </li></ul><ul><li>响应 </li></ul><ul><li>&quot;NOT_FOUNDrn&quot; </li></ul><ul><li><value>rn </li></ul>
  11. 11. 统计命令 <ul><li>请示 </li></ul><ul><li>statsrn </li></ul><ul><li>stats <args>rn </li></ul><ul><ul><li>Settings </li></ul></ul><ul><ul><li>Items </li></ul></ul><ul><ul><li>Sizes </li></ul></ul><ul><ul><li>slabs </li></ul></ul><ul><li>响应 </li></ul><ul><li>STAT <name> <value>rn </li></ul><ul><li>ENDrn </li></ul>
  12. 12. 配置选项 <ul><li>-m: 设置最大内存容量 </li></ul><ul><li>-M: 如果内存不足,报错 </li></ul><ul><li>-c: 最大连接数 </li></ul><ul><li>-f: slab 数据块增长因子 </li></ul><ul><li>-t: 线程数 (default:4) </li></ul>
  13. 13. 主要数据结构及算法
  14. 14. 当前版 item 结构
  15. 15. 当前版 slabclass_t 结构
  16. 16. 内部 Hash 机制
  17. 17. Memcache 的分布式
  18. 18. Memcache 的分布式 [set]
  19. 19. Memcache 的分布式 [get]
  20. 20. 一致性 HASH <ul><li>servers = ['server1:11211', 'server2:11211', 'server3:11211'] </li></ul><ul><li>server_for_key(key) = servers[hash(key) % servers.length] </li></ul><ul><li>Vbuckets 方案 </li></ul><ul><li>servers = ['server1:11211', 'server2:11211', 'server3:11211'] </li></ul><ul><li>vbuckets = [0, 0, 1, 1, 2, 2] </li></ul><ul><li>server_for_key(key) = servers[vbuckets[hash(key) % vbuckets.length]] </li></ul><ul><li>http://dustin.github.com/2010/06/29/memcached-vbuckets.html </li></ul>
  21. 21. 一致性 HASH
  22. 22. 一致性 HASH [new node]
  23. 23. Memcached 的内存管理 <ul><li>先为分配相应的大块内存,在在上面进行无缝小对象填充 </li></ul><ul><li>懒惰检测机制, Memcached 不花过多的时间在检测各个 item 对象是否超时,当 get 获取数据时, 才检查 item 对象是否应该删除,你不访问,我就不处理 </li></ul><ul><li>懒惰删除机制,在 memcached 中删除一个 item 对象的时候,并不是从内存中释放,而是单单的 > 进行标记处理,再将其指针放入 slot 回收插糟,下次分配的时候直接使用。 </li></ul>
  24. 24. Slab Allocation 机制
  25. 25. 推荐读物和引用 <ul><li>Memcached Study - http://www.slideshare.net/puny/memcached-study-presentation </li></ul><ul><li>Memcache 解析中文文档 - http://wenku.baidu.com/view/3043a5fdc8d376eeaeaa3173.html </li></ul><ul><li>Memcached Resources / Articles / Books - http://code.google.com/p/memcached/wiki/Resources </li></ul><ul><li>Moxi - Memcached Proxy - http://www.slideshare.net/northscale/moxi-memcached-proxy </li></ul><ul><li>Scaling Memcached with vBuckets - http://dustin.github.com/2010/06/29/memcached-vbuckets.html </li></ul>
  1. Gostou de algum slide específico?

    Recortar slides é uma maneira fácil de colecionar informações para acessar mais tarde.

×