Memcached 介绍

1、Memcached简介

  Memcached是国外社区网站LiveJournal的开发团队开发的高性能分布式内存缓存服务器。一般的使用目的是,通过缓存数据库查询结果,减少数据库访问次数,以提高动态Web应用的速度,提高可扩展性。

2、Memcached特点

  • 基于C/S架构,协议简单
  • 基于libevent的事件处理机制
  • 自主内存存储处理
  • 基于客户端的Memcached分布式
  • 自主内存存储方式
  • 数据存储方式:Slab Allocation
  • 数据过期方式:Lazy Expiration + LRU

说明:

  Slab Allocation

  Slab Allocation 的原理是将分配的内存分割成各种尺寸的块(chunk),并把尺寸相同的块分成组(chunk 的集合),如图

另外slab allocator 还有重复使用已分配的内存功能。即分配到的内存不会释放,而是重复利用。但这也可能会导致不能有效的使用分配的内存。

  Lazy Expiration
  Memcached内部不会监视记录是否过期,而是在get时查看记录的时间戳,检查记录是否过期。这种技术成为lazy expiration。Memcached不会在过期监视上浪费CPU时间。
  LRU
  Memcached会优先使用已超时的记录空间,但即使如此,也会发生追加新纪录时空间不足的情况。这时需要使用Least Recently Used(LRU)机制,删除最近最少使用的记录方式来分配空间。
3、Memcachedz配置
  Memcached服务器在启动时需要对关键的参数进行配置,参数及作用如下:
  1. -p <num> Memcached的TCP监听端口,缺省配置为11211;
  2. -U <num> Memcached的UDP监听端口,缺省配置为11211,为0时表示关闭UDP监听;
  3. -s <file> Memcached监听的UNIX套接字路径;
  4. -a <mask> 访问UNIX套接字的八进制掩码,缺省配置为0700;
  5. -l <addr> 监听的服务器IP地址,默认为所有网卡;
  6. -d 为Memcached服务器启动守护进程;
  7. -r 最大core文件大小;
  8. -u <username> 运行Memcached的用户,如果当前为root的话需要使用此参数指定用户;
  9. -m <num> 分配给Memcached使用的内存数量,单位是MB;
  10. -M 指示Memcached在内存用光的时候返回错误而不是使用LRU算法移除数据记录;
  11. -c <num> 最大并发连数,缺省配置为1024;
  12. -v –vv –vvv 设定服务器端打印的消息的详细程度,其中-v仅打印错误和警告信息,-vv在-v的基础上还会打印客户端的命令和相应,-vvv在-vv的基础上还会打印内存状态转换信息;
  13. -f <factor> 用于设置chunk大小的递增因子;
  14. -n <bytes> 最小的chunk大小,缺省配置为48个字节;
  15. -t <num> Memcached服务器使用的线程数,缺省配置为4个;
  16. -L 尝试使用大内存页;
  17. -R 每个事件的最大请求数,缺省配置为20个;
  18. -C 禁用CAS,CAS模式会带来8个字节的冗余;

4、Memcached与redis对比

  1. 性能对比:由于Redis只使用单核,而Memcached可以使用多核,所以平均每一个核上Redis在存储小数据时比Memcached性能更高。而在100k以上的数据中,Memcached性能要高于Redis,虽然Redis最近也在存储大数据的性能上进行优化,但是比起Memcached,还是稍有逊色。
  2. 内存使用效率对比:使用简单的key-value存储的话,Memcached的内存利用率更高,而如果Redis采用hash结构来做key-value存储,由于其组合式的压缩,其内存利用率会高于Memcached。
  3. Redis支持服务器端的数据操作:Redis相比Memcached来说,拥有更多的数据结构和并支持更丰富的数据操作,通常在Memcached里,你需要将数据拿到客户端来进行类似的修改再set回去。这大大增加了网络IO的次数和数据体积。在Redis中,这些复杂的操作通常和一般的GET/SET一样高效。

  总之Redis支持简单的k/v类型的数据,同时还提供list,set,zset,hash等数据结构的存储。支持数据的备份,即master-slave模式的数据备份。支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用。

5、Memcached适用场景

  1. 访问频繁的字典数据
  2. 大量的hot数据(热门数据缓存)
  3. 页面缓存(web站常用)
  4. 搜索的查询条件和结果(热门搜索的内容缓存起来)
  5. 临时处理数据(不需要入库,排重)
posted @ 2019-02-20 18:07  花拾夕  阅读(638)  评论(0编辑  收藏  举报