memcache学习笔记

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 退出

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,569评论 4 363
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,499评论 1 294
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,271评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,087评论 0 209
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,474评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,670评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,911评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,636评论 0 202
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,397评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,607评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,093评论 1 261
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,418评论 2 254
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,074评论 3 237
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,092评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,865评论 0 196
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,726评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,627评论 2 270

推荐阅读更多精彩内容