memcached文档

作者: 6720d063c48d | 来源:发表于2017-03-20 15:02 被阅读150次

    memcached文档

    memcached介绍

    Memcached 是国外 社区 网站 LiveJournal 的开发团队开发的 高性能的分布式内

    存缓存服务器。一般的使用目的是,通过缓存数据库查询结果,减少数据库访

    问次数,以提高动态 Web 应用的速度、提高可扩展性

    基于 libevent 的事件处理

    libevent 是一套跨平台的事件处理接口的封装,能够兼容包括这些操作系统:

    Windows/Linux/BSD/Solaris 等操作系统的的事件处理。

    包装的接口包括:

    poll 、 select(Windows) 、 epoll(Linux) 、 kqueue(BSD) 、 /dev/pool(Solaris)

    Memcached 使用 libevent 来进行网络并发连接的处理,能够保持在很大并发情

    况下,仍旧能够保持快速的响应能力。

    Memcached 的主要特点

    • 基于 C/S 架构, 协议简单
    • 基于 libevent 的事件处理
    • 自主内存存储处理
    • 基于客户端的 Memcached

    自主的内存存储处理

    • 数据 存储方式: Slab Allocation
    • 数据 过期 方式: Lazy Expiration + LRU

    数据存储方式: Slab Allocation

    Slab Allocator 的基本原理是按照预先规定的大小,将分配的内存分割成特定长度的块,以完全解决内存碎片问题。

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

    Page : 分配给 Slab 的内存空间,默认是1MB 。分配给 Slab 之后根据 slab 的大小

    切分成 chunk 。

    Chunk : 用于缓存记录的内存空。

    Slab Class : 特定大小的 chunk 的组。

    memcached 根据收到的数据的大小,选择最适合数据大小的 slab 。

    memcached 中保存着 slab 内空闲 chunk 的列表,根据该列表选择 chunk ,然后将数据缓存于其中。

    Slab Alloction 缺点

    这个问题就是,由于分配的是特定长度的内存,因此无法有效利用分配的内存。例如,将 100 字节的数据缓存到 128 字节的 chunk 中,剩余的 28 字节就浪费了

    数据过期方式

    • Lazy Expiration

    memcached 内部不会监视记录是否过期,而是在 get 时查看记录的时间戳,检查记录是否过期。这种技术被称为 lazy (惰性) expiration 。因此, memcached 不会在过期监视上耗费CPU 时间。

    • LRU

    memcached 会优先使用已超时的记录的空间,但即使如此,也会发生追加新记录时空间不足的情况,此时就要使用名为 Least Recently Used ( LRU )机制来分配空间。顾名思义,这是删除 “ 最近最少使用 ” 的记录的机制。因此,当 memcached 的内存空间不足时(无法从 slab class 获取到新的空间时),就从最近未被使用的记录中搜索,并将其空间分配给新的记录。从缓存的实用角度来看,该模型十分理想。

    memcached语法

    命令:
    统计类:stats, stats items, stats slabs, stats sizes
    存储类:set, add, replace, append, prepend
    命令格式:<command name> <key> <flags> <exptime> <bytes>  <cas unique>
    检索类:get, delete, incr/decr
    清空:flush_all
                
    示例:
    telnet> add KEY <flags> <expiretime> <bytes> \r
    telnet> VALUE
    
    
    -p <num> 监听的 TCP 端口 ( ( 缺省 : 11211)
    -d 以守护进程方式运行 Memcached
    -u <username> 运行 Memcached 的账户,非 root 用户
    -m <num> 最大的内存使用,  单位是 MB , 缺省是  64 MB
    -c <num> 软连接数量,  缺省是  1024
    -v 输出警告和错误信息
    -vv 打印客户端的请求和返回信息
    -h 打印帮助信息
    -i 打印 memcached 和 libevent
    -M:内存耗尽时,不执行LRU清理缓存,而是拒绝存入新的缓存项,直到有多余的空间可用时为止;
    -f <factor>:增长因子;默认是1.25;
    -t <threads>:启动的用于响应用户请求的线程数
    -U <num>:Listen on UDP port <num>, the default is port 11211, 0 is off.
    
    
    memcached默认没有认证机制,可借用于SASL进行认证;
    SASL:Simple Authentication Secure Layer
    
    
    
    启动
    systemctl start memcached
    
    连接
    telnet localhost 11211
    

    Memcached 一些特性和限制

    • 在 Memcached 中可以保存的 item 数据量是没有限制的,只有内存足够

    • Memcached 单进程最大使用内存为 2G ,要使用更多内存,可以分多个端口开启多个 Memcached 进程

    • 最大 30 天的数据过期时间, 设置为永久的也会在这个时间过期,常量 REALTIME_MAXDELTA 60* * 60* * 24* * 30 控制

    • 最大键长为 250 字节,大于该长度无法存储,常量 KEY_MAX_LENGTH 250 控制

    • 单个 item 最大数据是 1MB ,超过 1MB 数据不予存储,常量 POWER_BLOCK 1048576 进行控制,它是默认的 slab 大小

    • 最大同时连接数是 200 ,通过 conn_init() 中的 freetotal 进行控制,最大软连接数是 1024 ,通过settings.maxconns=1024 进行控制

    • 跟空间占用相关的参数: settings.factor=1.25, settings.chunk_size=48, 影响 slab

    • 调优slab 比如memcached -f 1.5 -vv

    相关文章

      网友评论

        本文标题:memcached文档

        本文链接:https://www.haomeiwen.com/subject/dytinttx.html