• 1. Memcached基本原理与实践
  • 2. 什么是Memcached?1、以LiveJournal旗下的Danga公司Brad Fitzpatric为首开发的 2、高性能的分布式内存缓存服务器 3、key/value模式
  • 3. 为什么要使用Memcached?1、Web应用数据库瓶颈 2、memcached缓存数据库查询结果 3、减少数据库访问次数 4、提高动态Web应用的响应速度和可扩展性
  • 4. 为什么要使用Memcached?
  • 5. memcached的特征1、协议简单(基于文本行的协议) 2、基于libevent的事件处理(高性能网络协议) 3、内置内存存储方式(重启丢失数据) 4、memcached不互相通信的分布式(易扩展)
  • 6. memcached不互相通信的分布式
  • 7. memcached基本命令1、常用的set,get,gets,delete 2、还有add,replace,append,prepend,cas,incr,decr 3、统计信息命令stats [slabs / items / sizes] 4、flush_all 5、quit
  • 8. memcached续基本命令注意事项: 1)set时key长度默认是250个字符 2)key不可以有控制字符 3)expire time不设置时视为永不过期,但若设置超过60*60*24*30(30天)则会当作是unix时间戳
  • 9. Memcached内存管理早期: 1、利用操作系统进行内存管理(malloc和free) 2、内存碎片 3、加重操作系统内存管理器的负担
  • 10. Memcached内存管理最新:Slab Allocator
  • 11. Memcached内存管理
  • 12. Memcached内存管理Slab Allocator缺点:内碎片
  • 13. 使用Growth Factor进行调优早期:Growth Factor固定为2 slab class 1: chunk size 128 perslab 8192 slab class 2: chunk size 256 perslab 4096 slab class 3: chunk size 512 perslab 2048 slab class 4: chunk size 1024 perslab 1024 slab class 5: chunk size 2048 perslab 512 slab class 6: chunk size 4096 perslab 256 slab class 7: chunk size 8192 perslab 128 slab class 8: chunk size 16384 perslab 64 slab class 9: chunk size 32768 perslab 32 slab class 10: chunk size 65536 perslab 16
  • 14. 使用Growth Factor进行调优目前:Growth Factor默认1.25(更适合缓存几百字节的记录) slab class 1: chunk size 88 perslab 11915 slab class 2: chunk size 112 perslab 9362 slab class 3: chunk size 144 perslab 7281 slab class 4: chunk size 184 perslab 5698 slab class 5: chunk size 232 perslab 4519 slab class 6: chunk size 296 perslab 3542 slab class 7: chunk size 376 perslab 2788 slab class 8: chunk size 472 perslab 2221 slab class 9: chunk size 592 perslab 1771 slab class 10: chunk size 744 perslab 1409
  • 15. 查看slabs的使用状况# Item_Size Max_age 1MB_pages Count Full? 1 104 B 1394292 s 1215 12249628 yes 2 136 B 1456795 s 52 400919 yes 3 176 B 1339587 s 33 196567 yes 4 224 B 1360926 s 109 510221 yes 5 280 B 1570071 s 49 183452 yes 6 352 B 1592051 s 77 229197 yes 7 440 B 1517732 s 66 157183 yes 8 552 B 1460821 s 62 117697 yes 9 696 B 1521917 s 143 215308 yes 10 872 B 1695035 s 205 246162 yes 列 含义 # slab class编号 Item_Size Chunk大小 Max_age LRU内最旧的记录的生存时间 1MB_pages 分配给Slab的页数 Count Slab内的记录数 Full? Slab内是否含有空闲chunk
  • 16. memcached数据删除Lazy Expiration:不在过期监视上耗费CPU时间 内存空间不足时:Least Recently Used(LRU)删除
  • 17. Memcached分布式
  • 18. Memcached分布式
  • 19. Memcached分布式
  • 20. Memcached分布式算法官方:余数计算分散(求得键的整数哈希值,再除以服务器台数,根据其余数来选择服务器) 缺点:添加或移除服务器时,余数就会产生巨变,这样就无法获取与保存时相同的服务器,从而影响缓存的命中率。
  • 21. Memcached分布式算法优化:Consistent Hashing(一致hash)
  • 22. Memcached分布式算法
  • 23. 使用中的注意事项1、当前使用的python客户端不支持一致性哈希算法,所以memcached server的顺序必须要保持一致 2、不要存太大的数据,如超过1M,memcached默认是不能存超过1M的数据的,其次过大的数据在进行序列化与反序列化时会浪费掉不少时间 3、不要往里存django orm,会导致memcached crash 4、key不能包含控制字符和空白字符,可以把key 进行md5后的结果作为key
  • 24. 谢谢!