资源预览内容
第1页 / 共44页
第2页 / 共44页
第3页 / 共44页
第4页 / 共44页
第5页 / 共44页
第6页 / 共44页
第7页 / 共44页
第8页 / 共44页
第9页 / 共44页
第10页 / 共44页
亲,该文档总共44页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
Memcached使用及运维By 薛长俊 2013-8介绍安装和使用周边Memcached应用示例介绍 介绍Memcached是国外社区网站 LiveJournal 的开发团队开发的高性能的分布式 内存缓存服务器。一般的使用目的是,通过缓存数据库查询结果,减少数据库 访问次数,以提高动态Web应用的速度、提高可扩展性。memcache是一个自由和开放源代码、高性能、分布式的内存对象缓存系统。 用于加速动态web应用程序,减轻数据库负载。 介绍 Memcached运行图介绍 Memcached特征基于C/S架构,协议简单 ; 基于libevent的事件处理 ; 内置内存存储方式 ; 基于客户端的memcached分布式。 适用场景需要分布式部署的; 需要频繁访问相同数据的; 需要数据共享的。介绍 基于C/S架构,协议简单 服务端启动memcached进程; 客户端可以通过telnet操作,也可以通过各种编程语言实现的客户端程序存取 数据及查询状态; memcached的服务器与客户端通信并不使用复杂的XML等格式,而使用简单 的基于文本行的协议。 基于libevent的事件处理 libevent是一套跨平台的事件处理接口的封装,能够兼容包括这些操作系统: Windows/Linux/BSD/Solaris 等操作系统的的事件处理; 包装的接口包括:poll、select(Windows)、epoll(Linux)、kqueue(BSD)、 /dev/pool(Solaris); Memcached 使用libevent来进行网络并发连接的处理,能够保持在很大并发 情况下,仍旧能够保持快速的响应能力。介绍 数据存储方式:Slab AllocationSlab Allocator的基本原理是按照预先规定的大小,将分配的内存分割成特 定长度的块,以完全解决内存碎片问题。 Slab Allocation的原理相当简单。 将分配的内存分割成各种尺寸的块( chunk),并把尺寸相同的块分成组(chunk的集合) Slab Alloction 构造图介绍 数据存储方式:Slab AllocationPage:分配给Slab的内存空间,默认是1MB。分配给Slab之后根据slab的大 小切分成chunk。 Chunk:用于缓存记录的内存空间。 Slab Class:特定大小的chunk的组。 memcached根据收到的数据的大小,选择最适合数据大小的slab。 memcached中保存着slab内空闲chunk的列表,根据该列表选择chunk,然 后将数据缓存于其中。 Slab Alloction 分配图介绍 数据存储方式:Slab AllocationSlab Alloction 缺点:由于分配的是特定长度的内存,因此无法有效利用分配 的内存。例如,将100字节的数据缓存到128字节的chunk中,剩余的28字节 就浪费了。介绍 数据过期方式-Lazy Expirationmemcached内部不会监视记录是否过期,而是在get时查看记录的时间戳, 检查记录是否过期。这种技术被称为lazy(惰性)expiration。因此, memcached不会在过期监视上耗费CPU时间。 数据过期方式-LRUmemcached会优先使用已超时的记录的空间,但即使如此,也会发生追加新 记录时空间不足的情况,此时就要使用名为 Least Recently Used(LRU)机 制来分配空间。顾名思义,这是删除“最近最少使用”的记录的机制。因此, 当memcached的内存空间不足时(无法从slab class 获取到新的空间时), 就从最近未被使用的记录中搜索,并将其空间分配给新的记录。从缓存的实用 角度来看,该模型十分理想。介绍 基于客户端的分布式选择服务器节点常见算法: 1.余数式hash算法 2.一致性hash算法安装和使用 安装部署cd /root/install wget http:/control.club.sohu.com/store/memcached-1.4.5.tar.gzyum -y install libevent libevent-devel find ./ -type f -name *.tar.gz -exec tar -zxf ;cd /root/install/memcached-1.4.5 ./configure -prefix=/opt/soft/memcached-1.4.5 make clean make make installln -s /opt/soft/memcached-1.4.5/ /opt/soft/memcached 启动参数-p 监听的TCP端口(默认: 11211) -U 监听的UDP端口(默认: 11211, 0表示不监听) -s 用于监听的UNIX套接字路径(禁用网络支持) -a UNIX套接字访问掩码,八进制数字(默认:0700) -l 监听的IP地址。(默认:INADDR_ANY,所有地址) -d作为守护进程来运行。 -r最大核心文件限制。 -u 设定进程所属用户。(只有root用户可以使用这个参数) -m 单个数据项的最大可用内存,以MB为单位。(默认:64MB) -M内存用光时报错。(不会删除数据) -c 最大并发连接数。(默认:1024) -k锁定所有内存页。注意你可以锁定的内存上限。试图分配更多内存 会失败的,所以留意启动守护进程时所用的用户可分配的内存上限。 -v提示信息(在事件循环中打印错误/警告信息。) -vv详细信息(还打印客户端命令/响应)安装和使用 启动参数-vvv超详细信息(还打印内部状态的变化) -h打印这个帮助信息并退出。 -I打印memcached和libevent的许可。 -P 保存进程ID到指定文件,只有在使用 -d 选项的时候才有意义。 -f 块大小增长因子。(默认:1.25) -n 分配给key+value+flags的最小空间(默认:48) -L尝试使用大内存页(如果可用的话)。 -D 使用 作为前缀和ID的分隔符。 -t 使用的线程数(默认:4) -R每个连接可处理的最大请求数。 -C禁用CAS。 -b 设置后台日志队列的长度(默认:1024) -B绑定协议 - 可能值:ascii,binary,auto(默认) -I 重写每个数据页尺寸。调整数据项最大尺寸。安装和使用 监测脚本示例#!/bin/shpid=/bin/ps -ef | grep memcached -d | grep 8086 | grep -v grep | awk print $2 if -n “$pid” ; then echo $pid else /opt/soft/memcached/bin/memcached -d -m 2048 -c 2048 -l 127.0.0.1 -p 8086 -u root fi 添加至cron* * * * * /opt/scripts/checkMemcached.sh安装和使用 命令列表存储命令set/add/replace/append/prepend/cas 读取命令get/gets 删除命令delete 计数命令incr/decr 统计命令stats/settings/items/sizes/slabs 工具memcached-tool安装和使用 格式command 安装和使用commandset无论如何都进行存储 add只有数据不存在时进行添加 repalce只有数据存在时进行替换 append往后追加:append datablock ? prepend往前追加:prepend datablock cas按版本号更改 key字符串,30天为unixtimebytesbyte字节数,不包含rn,根据长度截取存/取的字符串,可以是0,即存空串datablock文本行,以rn结尾,当然可以包含r或nstatusSTORED/NOT_STORED/EXISTS/NOT_FOUND ERROR/CLIENT_ERROR/SERVER_ERROR服务端会关闭连接以修复 存储命令set/add/replace安装和使用set lu 32 0 7 zicheng STORED/正确get lu VALUE lu 32 7 zicheng ENDset lai 32 0 6 laiji CLIENT_ERROR bad data chunk ERROR/长度错误set lu 32 0 7 zicheng STOREDadd lu 32 0 7 zicheng NOT_STORED/已存在 不能addadd lai 32 0 5 laiji STORED /不存在可以 addset lu 32 0 7 zicheng STOREDreplace lu 32 0 9 luzicheng STORED/已存在可以 replacereplace jige 32 0 5 laiji NOT_STORED/不存 在不能replacedatablock长度必须正确add只能添加不存在的keyreplace只能替换已有的key 读取命令get/gets安装和使用set lu 32 0 7 zicheng STOREDset lai 32 0 5 laiji STOREDget lu lai VALUE lu 32 7 zicheng VALUE lai 32 5 laiji ENDget普通查询,gets用于查询带版本的值,多个key用空格分开set lu 32 0 7 zicheng STOREDset lai 32 0 5 laiji STOREDgets lu lai VALUE lu 32 7 3 zicheng VALUE lai 32 5 4 laiji END 检查存储命令cas安装和使用gets lu VALUE lu 32 7 3 zicheng ENDcas lu 32 0 7 3 zicheng STORED/版本号相同才修改gets lu VALUE lu 32 7 5 zicheng ENDcas即check and set,只有版本号相匹配时才能存储,否则返回EXISTS 设计意图:解决多客户端并发修改同一条记录的问题,防止使用经过改变了 的value/key对 计数命令incr/decr安装和使用set count 32 0 1 1 STOREDincr count 100 101decr count 23 78delete count DELETEDincr count 1 NOT_FOUNDset lu 32 0 7 zicheng STOREDincr lu 100 CLIENT_ERROR cannot increment or decrement non- numeric value实现计数器key不存在不能计数value不是数字不能计数 删除命令delete安装和使用set lu 32 0 7 zicheng STOREDdelete lu DELETEDget lu END格式:delete time: 秒数或Unixtime,在time时间内不能add或replace,但能set,不能get 。过期后才能够重新set有效并能get 统计命令stats安装和使用格式:stats stats STAT pid 25587 STAT uptime 6038 STAT time 1376993797 STAT version 1.4.5 STAT pointer_size 64 STAT rusage_user 0.000000 STAT rusage_system 0.004000 STAT curr_connections 5
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号