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

memcached 学习的更多相关文章

  1. memcached 学习 1—— memcached+spring配置

    memcached 学习目录: memcached 学习 1—— memcached+spring配置 这几天自己搭建项目环境,解决问题如下: 有关常见的配置这里没有列出,中间遇到的搭建问题比较顺利g ...

  2. memcached学习笔记——存储命令源码分析下篇

    上一篇回顾:<memcached学习笔记——存储命令源码分析上篇>通过分析memcached的存储命令源码的过程,了解了memcached如何解析文本命令和mencached的内存管理机制 ...

  3. memcached学习笔记——存储命令源码分析上篇

    原创文章,转载请标明,谢谢. 上一篇分析过memcached的连接模型,了解memcached是如何高效处理客户端连接,这一篇分析memcached源码中的process_update_command ...

  4. Memcached 学习笔记(二)——ruby调用

    Memcached 学习笔记(二)——ruby调用 上一节我们讲述了怎样安装memcached及memcached常用命令.这一节我们将通过ruby来调用memcached相关操作. 第一步,安装ru ...

  5. Memcached学习笔记

    [TOC] 前言 此为学习笔记汇总,如有纰漏之处,还望不吝指出,谢谢. 启动流程 调用settings_init()设定初始化参数 从启动命令中读取参数来设置setting值 设定LIMIT参数 开始 ...

  6. 分布式缓存技术memcached学习(二)——memcached基础命令

    上文<linux环境下编译memcahed>介绍了memcahed在linux环境下的安装以及登录,下面介绍memcahed的基本命令的使用. Add 功能:往内存增加一条新的缓存记录 语 ...

  7. 应用程序Cache对象到高性能Memcached学习之路

    来源:微信公众号CodeL 以下是个人学习之路的简单分享,不足之处欢迎大神们批评指正! 在网站开发的初期,我们没有考虑更多的东西,也没有对缓存进行系统的设计,而是直接使用了应用程序缓存对象Cache, ...

  8. memcached学习笔记2--安装及命令

    学习memcached的原理: 用户一 -> 访问浏览器 -> 服务器Apache -> PHP文件(该文件应用了memcached技术) -> [第一次]到数据库DB中查找数 ...

  9. 分布式缓存技术memcached学习系列(二)——memcached基础命令

    上文<linux环境下编译memcahed>介绍了memcahed在linux环境下的安装以及登录,下面介绍memcahed的基本命令的使用. Add 功能:往内存增加一条新的缓存记录 语 ...

  10. 分布式缓存技术memcached学习(五)—— memcached java客户端的使用

    Memcached的客户端简介 我们已经知道,memcached是一套分布式的缓存系统,memcached的服务端只是缓存数据的地方,并不能实现分布式,而memcached的客户端才是实现分布式的地方 ...

随机推荐

  1. 一条SQL生成数据字典

    有个字典表并定期维护,对DBA和开发很重要,终于把他们整合在一起了,看有没问题? 一条SQL生成数据字典,包含所有OPEN用户.表名.字段名.字段序号.字段属性.默认值.是否非空.字段意思.主键标识. ...

  2. CDN工作机制和负载均衡

    定义:  CDN 即内容分布网络,(Content Delivery Netwrok) ,是构筑在现有Internet上的一种先进的流量分配网络,其目的是通过在现有的Internet中增加一层新的网络 ...

  3. C++基础——类封装简单示例

    一.前言 在IC前端设计/验证领域,只会HDL远远不够.目前大多数项目使用已开发好的系统架构和IP Core,因此设计部分的工作量慢慢向系统集成和验证方向转移.而在集成和验证过程中,往往以各种脚本和面 ...

  4. ReactNative之结合具体示例来看RN中的的Timing动画

    今天继续更新RN相关的博客.上篇博客详细的聊了RN中关于Flex布局的相关东西,具体请参见<ReactNative之参照具体示例来看RN中的FlexBox布局>.本篇博客继续更新RN的动画 ...

  5. 自学python的日记分享

    2019.4.22登记 课堂笔记 2019.4.8 在windows环境下,用python写出第一个程序“hello world” print("Hello World!!!") ...

  6. Java数据结构和算法 - OverView

    Q: 为什么要学习数据结构与算法? A: 如果说Java语言是自动档轿车,C语言就是手动档吉普.数据结构呢?是变速箱的工作原理.你完全可以不知道变速箱怎样工作,就把自动档的车子从1档开到4档,而且未必 ...

  7. Android开发:Android Studio开发环境配置

    一.android studio下载: 1.Windows版: 下载地址:https://pan.baidu.com/s/1-sg4dN_2B5nn2YJf-C7XLQ 提取码:yedc 2.Mac版 ...

  8. 从壹开始前后端分离 [.netCore 填坑 ] 三十四║Swagger:API多版本控制,带来的思考

    前言 大家周二好呀,.net core + Vue 这一系列基本就到这里差不多了,今天我又把整个系列的文章下边的全部评论看了一下(我是不是很负责哈哈),提到的问题基本都解决了,还有一些问题,已经在QQ ...

  9. ASP.NET Core Web API 集成测试中使用 Bearer Token

    在 ASP.NET Core Web API 集成测试一文中, 我介绍了ASP.NET Core Web API的集成测试. 在那里我使用了测试专用的Startup类, 里面的配置和开发时有一些区别, ...

  10. TensorFlow使用GPU

    查看机器 GPU 的信息: nvidia-smi 持续更新查看: nvidia-smi -l 其他方式如下: import os # 使用GPU0 和 GPU1 os.environ['CUDA_VI ...