• memcached 缓存服务器


    Memcached 缓存服务器

    Memcached 是高性能的分布式内存缓存服务器
    一般的使用目的是,通过缓存数据库查询结果,减少数据库访问次数,以提高动态web应用的速度、提高可扩展性。
    主要特点:
    1、C/S架构,协议简单;
    2、基于libevent的事件处理(epoll);
    3、Slab Allocation内存管理机制;
    4、基于客户端的分布式;
     
    Memcached 的安装:
    yum -y install libevent-devel
    wget http://www.memcached.org/files/memcached-1.4.20.tar.gz
    ./configure --prefix=/usr/local/memcached
    make && make install
     
    Memcached中保存的数据都在内存中,因此重启memcached,会导致全部数据丢失;
    另外,内存容量达到指定值之后,就基于LRU(Least Recently Used)算法自动删除不使用的缓存;
     

    Memcached的限制:
    1、保存的item数量没有限制,只要内存足够;
    2、最长30天的数据过期时间,由常量REALTIME_MAXDELTA 60*60*24*30控制;
    3、最大键长为250字节,由常量KEY_MAX_LENGTH 250控制;
    4、单个item最大数据是1MB,由常量POWER_BLOCK 1048576控制;
    5、最大同时连接数是200,通过conn_init中的freetotal控制;最大软连接是1024,通过settings.maxconns=1024控制;
    Memcached的分布式:Consistent Hashing
    memcached服务器端并没有分布式功能,因此,分布式完全依赖于客户端的实现。
    客户端程序采用一致性哈希算法,为不同的键选取不同的memcached服务器进行存储。
     
    Consistent Hashing算法:
    1、求出memcached服务器(节点)的哈希值,并将其配置到0~2^32的圆上;
    2、用同样的方法求出Key的哈希值,并映射到圆上,然后从数据映射的位置开始顺时针查找,将数据保存到找到的第一个服务器上。
     
     

    一、命令行选项

    1、memcached命令行选项:
     
    -p          指定tcp监听端口,默认为11211
    -m         最大内存大小,默认64MB
    -d          作为daemon在后台启动
    -vv          very verbose模式启动, 调试信息和错误信息输出到控制台
    -f          指定Growth Factor,默认1.25
    -M          禁用LRU,内存耗尽后返回错误
    -c          最大并发连接数,默认1024
    -u          指定username(仅在以root启动进程时)
    -P          指定pid文件路径
     
    例如,以守护进程启动memcache
    ./memcached -d -m 10 -u root -l 127.0.0.1 -p 12000 -c 256 -P /tmp/memcached.pid 
     
    2、客户端连接到memcached服务器:
    telnet 127.0.0.1 12000 
    (输入quit命令退出连接)
     
     

    二、命令格式

    常用命令

    命令 命令说明
    存储命令(格式如下)
    set
    向缓存添加新的键值对,若键已经存在,则替换之
    add
    仅当缓存中不存在键时,才向缓存添加一个键值对;如果key已存在,操作失败
    replace
    仅当键已存在时,才会替换缓存中的键;如果key不存在,操作失败
    append 在已有的缓存数据后添加,如果key不存在,返回NOT_STORED
    prepend
    与append类似,但是在缓存前添加数据
    cas
    checked and set的意思,只有当最后一个参数和gets所获取的参数匹配时才能存储,否则返回“EXISTS”
    incr 
    自增,incr key value,对数字型value自增一个值
    decr
    自减
       
    读取命令
    get 查找键,比如 get key1, key2 ...
    gets gets命令比普通的get命令多返回了一个数字,这个数字可以检查数据是否发生改变
    delete 删除键
     flush_all  清空cache
    状态命令
    stats 查看memcached服务器基本状态
    stats cachedump slab_id limit_num  

     

     

     

     

     

     

     

     

     

     

     存储命令的格式

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

    参数说明:

    <command name> set/add/replace
    <key> 查找关键字
    <flags> 客户机使用它存储关于键值对的额外信息
    <exptime> 该数据的存活时间,0表示永不过期
    <bytes> 存储字节数
    <data block> 存储的数据块(可直接理解为key-value结构中的value)

     

     

    例子1:

     

     

    三、Memcached内存管理机制

    Memcached的内存管理机制:Slab Allocation
    1、将分配的内存分割成各种尺寸的块(chunk),并把尺寸相同的块分成组(chunk的集合)==>解决内存碎片问题
    memcached在启动时指定Growth Factor因子(-f选项),就可以控制slab之间的差异,默认值为1.25。
    2、分配到的内存不会释放,而是重复利用==>避免频繁的调用malloc和free
    3、Memcached根据收到的数据大小,选择最适合数据大小的slab。
     
                                
     
    几个概念术语:
    Page:分配给Slab的内存空间,默认是1MB;
    Chunk:用于缓存记录的内存空间;
    Slab Class:特定大小的chunk的组;
     
     
    Lazy Expiration:memcached内部不会监视记录是否过期,而是在get时查看记录的时间戳,检查记录是否过期。
    记录超时后,memcached也不会释放已分配的内存,而是将其标记为可重用。
    LRU:当内存空间不足时(无法从slab class获取到新空间),就从最近未被使用的记录中搜索,并将其空间分配给新纪录。

     

     

  • 相关阅读:
    nyoj891找点(贪心)
    spark streaming方法
    spark submit打印gc信息
    spark dataframe方法解释
    structed streaming基础---跳过的坑
    scala学习---2
    增量式编码器定时器配置和速度计算的处理方法
    三次样条插补的实现
    增量式编码器计数的过零点处理问题
    串口发送带有使能引脚的注意事项
  • 原文地址:https://www.cnblogs.com/chenny7/p/3935639.html
Copyright © 2020-2023  润新知