zoukankan      html  css  js  c++  java
  • memcached 学习

    memcached

    是什么

    特点

    • 协议简单

    • 基于 libevent 的事件处理

    • 内置内存存储方式

    • memcached 不互相通信的分布式

    启动

    安装

    $ wget 下载地址 
    $ tar zxf memcached­-版本号.tar.gz  
    $ cd memcached­-版本号.tar.gz  
    $ ./configure  
    $ make  
    $ sudo make install
    

    启动

    • 启动命令 $ /usr/local/bin/memcached -­p 11211 ­m 64m -d

      -d 后台运行 -m 运行的最大内存大小 -p 使用 tcp 端口默认为11211 -vv very verbose

    基本命令

    保存命令

    add replace set

    • add

    • replace

    • set

    获取数据

    • get

    • get_multi 获取多个数据

    删除数据

    delete

    第二个参数代表延迟删除的时间。

    删除第一个参数指定的键的数据。第二个参数指定一个时间值,可以禁止使用同样的键保存新数据。

    set 函数会忽视这个时间

    增一&减一

    • 原子操作

    • 不会自动赋值

    • 不会对

    内部结构

    内存分配机制

    • Slab Allocator

      • 分配的内存不会释放

      • 术语

        • page 分配给 Slab 的内存空间,默认是 1MB。 分配给 Slab 之后根据 slab 的大小切分成 chunk。

        • chunk 用于缓存记录的内存空间。

        • slab class 特定大小的 chunk 的组。

    • memcached 如何选择 slab memcached 根据收到的数据的大小,选择最适合数据大小的 slab(图 2.2)。

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

    • 减少内存碎片

    • 缺点

      • 无法有效利用分配的内存 例如,将 100 字节 的数据缓存到 128 字节的 chunk 中,剩余的 28 字节就浪费了。
    • Growth Factor

      • 控制 slab 之间的差异,默认值为1.25 即 slab2 是 slab1 的 chunk 大小的 1.25 倍

        在之前 slab 的默认值是2

    监控命令

    连接

    telnet 主机名 端口号

    memcached-tool 使用

    memcached-tool 10.0.0.5:11211 display # shows slabs

    memcached-tool 10.0.0.5:11211 # same. (default is display) memcached-tool 10.0.0.5:11211 stats # shows general stats memcached-tool 10.0.0.5:11211 settings # shows settings stats memcached-tool 10.0.0.5:11211 sizes # shows sizes stats memcached-tool 10.0.0.5:11211 dump [limit] # dumps keys and values

    • 脚本如何获得 memcached 软件包的 scripts 目录中有一些工具,memcached-tool 也在其中 memcached-1.5.10/scripts

    可视化监控后台

    删除机制

    不过渡清除

    • 不会释放已分配的内存

    • lazy expiration memcached 内部不会监视记录是否过期,而是在 get 时查看记录的时间戳,检查记录是否过期。

      memcached 不会在过期监视上耗费 CPU 时间。

    空间不足

    • LRU 指定“­M”参数启动后,内存用尽时 memcached 会返回错误。话说回来,memcached 毕竟不是存储 器,而是缓存,所以推荐使用 LRU。

    分布式

    memcached 的分布式完全依赖客户端的实现

    余数分散

    一致性 hash

    Consistent Hashing 如下所示:

    首先求出 memcached 服务器(节点)的哈希值,并将其配置到 0~2 32 的圆(continuum)上。然后用同样的方法求出存储数据的键的哈希值,并映射到圆上。然后从数 据映射到的位置开始顺时针查找,将数据保存到找到的第一个服务器上。如果超过 2 32 仍然找不到 服务器,就会保存到第一台 memcached 服务器上。

    php 库: libketama

    image-20180910203215632

  • 相关阅读:
    c#多线程
    把.NET程序部署到没有安装.NET Framwork的机器上
    Java字符编码转换过程说明
    Window 消息大全使用详解
    Regsvr32
    VC++的应用程序框架中各类之间的访问方法
    java接收中文输入并正常显示
    Visual C#中的数据绑定
    截取系统 API 调用(转)
    几个操作文件的API函数
  • 原文地址:https://www.cnblogs.com/wudanyang/p/10723909.html
Copyright © 2011-2022 走看看