美文网首页
memcache学习笔记

memcache学习笔记

作者: geekdeedy | 来源:发表于2017-09-04 08:12 被阅读0次

    memcache简介

    memcache是一个自由、源码开放、高性能、分布式的分布式内存对象缓存系统,用于动态WEB应用以减轻数据库的负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高了网站的访问速度。

    memcache是一个存储键值对的HashMap,在内存中对任意的数据(比如字符串、对象等)所使用的键值存储,数据可以来自数据库调用、API调用,或者页面渲染的结果。memcache设计理念就是小而强大,它简单的设计促进了快速部署、易于开发并解决面对大规模的数据缓存的许多难题,而所开放的API使得memchace能用于Java、C/C++/C#、Perl、Python、PHP、Ruby等大部分流行的程序语言。

    memcache虽然被称为"分布式缓存",但其本身完全不具备分布式的功能,即memcache集群之间不会相互通信,所谓分布式完全依赖于客户端。而且不支持持久存储,仅支持存储流式化数据。

    memcache安装

    yum install memcache
    

    memcached默认没有认证机制,可借用于SASL进行认证;(SASL:Simple Authentication Secure Layer)
    分布式系统请求路由方法:取模法,一致性哈希算法;
    算法复杂度:O(1)
    清理过期缓存项:
    缓存耗尽:LRU(Least recently used,最近最少使用)算法根据数据的历史访问记录来进行淘汰数据,其核心思想是“如果数据最近被访问过,那么将来被访问的几率也更高”。
    缓存项过期:惰性清理机制(即缓存项过期后不会立即清理,而是会把过期项标记为不可用)
    默认监听的端口:11211/tcp, 11211/udp
    相关文件:
    主程序:/usr/bin/memcached
    配置文件:/etc/sysconfig/memcached
    Unit File:memcached.service
    协议格式:memcached协议
    文本格式
    二进制格式

    memcache设置

    启动方式:

    -d 以守护程序( daemon )方式运行

    -u root 指定用户,如果当前为 root ,需要使用此参数指定用户

    -P / tmp/ / a.pid 保存 PID 到指定文件

    内存设置:

    -m 1024 数据内存数量,不包含 memcached 本身占用,单位为 MB

    -M 内存不够时禁止 LRU ,报错

    -n 48 初始 chunk=key+suffix+value+32 结构体,默认 48 字节

    -f 1.25 增长因子,默认 1.25

    -L 启用大内存页,可以降低内存浪费,改进性能

    连接设置:

    -l 127.0.0.1 监听的 IP 地址,本机可以不设置此参数

    -p 11211 TCP 端口,默认为 11211 ,可以不设置

    -U 11211 UDP 端口,默认为 11211 ,0 0 为关闭

    并发设置:

    -c 1024 最大并发连接数,默认 1024 ,最好是 200

    -t 4 线程数,默认4 4 。由于 memcached 采用 NIO ,所以更多线程没有太多作用

    -R 20 每个 event 连接最大并发数,默认 20

    -C 禁用 CAS

    memcache管理

    管理命令格式:

    <command name> <key> <flags> <exptime> <bytes> <data block>
    

    参数说明:
    command name:管理命令(set、add、replace)
    key:查找关键词
    flags:客户端使用它存储关于键值对的额外信息
    exptime:该数据的存活时间,0表示永久有效
    bytes:存储字节数
    data block:存储的数据块(即键值对中的值)
    存储命令 set/add/replace/append/prepend/cas
    读取命令 get =bget? /gets
    删除命令 delete
    计数命令 incr/decr
    统计命令 stats/settings/items/sizes/slabs
    工具 memcached- - tool

    存储命令:

    <command> <key> <datablock>
    

    set无论如何都进行存储

    add只有数据不存在时进行添加

    repalce只有数据存在时进行替换

    append往后追加:append <key> datablock <status>?

    prepend往前追加:prepend <key> datablock <status>

    cas按版本号更改

    读取命令:

    get 普通查询

    gets 用于查询带版本的值

    cas即check and set 只有在版本号相匹配时才能存储,否则返回exits,设计意图:解决多客户端并发修改同一条记录的问题,防止使用经过改变了的value/key对

    v计数命令:

    incr/decr<key><int>
    

    计数要求:key 必须存在,value必须是数字

    删除命令:

    delete<key>[<time>]
    

    time:秒数或者unixtime,在time时间内不能add或者replace也不能get,但是能set。

    stats命令

    stats [<args>]\r\n

    pid Memcached进程ID
    uptime Memcached运行时间,单位:秒
    time Memcached当前的UNIX时间
    version Memcached的版本号
    分析CPU占用是否高
        rusage_user 该进程累计的用户时间,单位:秒
        rusage_system 该进程累计的系统时间,单位:秒
    分析连接数是否太多
        curr_connections 当前连接数量
        total_connections Memcached运行以来接受的连接总数
    connection_structures Memcached分配的连接结构的数量
    分析命中率是否太低
        cmd_get 查询请求总数
        get_hits 查询成功获取数据的总次数
        get_misses 查询成功未获取到数据的总次数
    cmd_set 存储(添加/更新)请求总数
    分析字节数流量
        bytes Memcached当前存储内容所占用字节数
        bytes_read Memcached从网络读取到的总字节数
        bytes_written Memcached向网络发送的总字节数
        limit_maxbytes Memcached在存储时被允许使用的字节总数
    分析对象数LRU频率
    curr_items Memcached当前存储的内容数量
    total_items Memcached启动以来存储过的内容总数
    evictions LRU释放对象数,用来释放内存
    

    stats setting查看设置

    maxbytes 最大字节数限制,0无限制
    maxconns 允许最大连接数
    tcpport TCP端口
    udpport UDP端口
    inter
    verbosity 日志0=none,1=som,2=lots
    oldest 最老对象过期时间
    evictions on/off,是否禁用LRU
    domain_socket socket的domain
    umask 创建Socket时的umask
    growth_factor 增长因子
    chunk_size key+value+flags大小
    num_threads 线程数,可以通过-t设置,默认4
    stat_key_prefix stats分隔符
    detail_enabled yes/no,显示stats细节信息
    reqs_per_event 最大IO吞吐量(每event)
    cas_enabled yes/no,是否启用CAS,-C禁用
    tcp_backlog TCP监控日志
    auth_enabled_sasl yes/no,是否启用SASL验证
    number 该slab中对象数,不包含过期对象
    age LRU队列中最老对象的过期时间
    evicted LRU释放对象数
    evicted_nonzero 设置了非0时间的LRU释放对象数
    evicted_time 最后一次LRU秒数,监控频率
    outofmemory 不能存储对象次数,使用-M会报错
    tailrepairs 修复slabs次数
    reclaimed 使用过期对象空间存储对象次数
    

    stats size对象数量统计格式:

    STAT <size> <count>
    

    注意:会锁定服务,暂停处理请求
    stats slab区块统计

    区块数量:
    chunk_size chunk大小,byte
    chunks_per_page 每个page的chunk数量
    total_pages page数量
    total_chunks chunk数量*page数量
    命中率
    get_hits get命中数
    cmd_set set数
    delete_hits delete命中数
    incr_hits incr命中数
    decr_hits decr命中数
    cas_hits cas命中数
    cas_badval cas数据类型错误数
    分析占用情况
    used_chunks 已被分配的chunk数
    free_chunks 剩余chunk数
    free_chunks_end 分完page浪费chunk数
    mem_requested 请求存储的字节数
    
    active_slabs slab数量
    total_malloced 总内存数量
    

    被浪费内存数=(total_chunks * chunk_size) - mem_requested
    如果太大,需要调整factor
    其他命令
    version 查看版本号
    flush_all 清理所有
    quit 退出

    相关文章

      网友评论

          本文标题: memcache学习笔记

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