1.概述
Memcached是一个自由开源的,高性能,分布式内存对象缓存系统。
Memcached是一种基于内存的key-value存储,用来存储小块的任意数据(字符串、对象)。这些数据可以是数据库调用、API调用或者是页面渲染的结果。
Memcached简洁而强大。它的简洁设计便于快速开发,减轻开发难度,解决了大数据量缓存的很多问题。它的API兼容大部分流行的开发语言。
本质上,它是一个简洁的key-value存储系统。
一般的使用目的是,通过缓存数据库查询结果,减少数据库访问次数,以提高动态Web应用的速度、提高可扩展性。
2.特征
memcached作为高速运行的分布式缓存服务器,具有以下的特点:
协议简单
基于libevent的事件处理
内置内存存储方式
memcached不互相通信的分布式
3.Linux Memcached安装
Linux系统安装memcached,首先要先安装libevent库:
yum install libevent libevent-devel
安装 Memcached:
yum install memcached
运行 Memcached:(bin -> usr/bin)
/usr/bin/memcached -h
/bin/memcached -h
启动选项:
-d是启动一个守护进程;
-m是分配给Memcache使用的内存数量,单位是MB;
-u是运行Memcache的用户;
-l是监听的服务器IP地址,可以有多个地址;
-p是设置Memcache监听的端口,最好是1024以上的端口;
-c是最大运行的并发连接数,默认是1024;
-P是设置保存Memcache的pid文件。
(1)作为前台程序运行:
/bin/memcached -p 11211 -m 64m -vv -u root
(2)作为后台服务程序运行:
/bin/memcached -p 11211 -m 64m -u root -d
/bin/memcached -d -m 1024 -u root -l 127.0.0.1 -p 11211 -c 1024 -P /tmp/memcached.pid
4.Memcached set命令
Memcached set 命令用于将 value(数据值) 存储在指定的 key(键) 中。
如果set的key已经存在,该命令可以更新该key所对应的原来的数据,也就是实现更新的作用。
语法:
set key flags exptime bytes [noreply]
value
参数说明如下:
key:键值 key-value 结构中的 key,用于查找缓存值。
flags:可以包括键值对的整型参数,客户机使用它存储关于键值对的额外信息 。
exptime:在缓存中保存键值对的时间长度(以秒为单位,0 表示永远)
bytes:在缓存中存储的字节数
noreply(可选): 该参数告知服务器不需要返回数据
value:存储的值(始终位于第二行)(可直接理解为key-value结构中的value)
例如:
set foo 0 900 9
memcached
get foo
5.Memcached add 命令
Memcached add 命令用于将 value(数据值) 存储在指定的 key(键) 中。
如果 add 的 key 已经存在,则不会更新数据(过期的 key 会更新),之前的值将仍然保持相同,并且您将获得响应 NOT_STORED。
语法:
add key flags exptime bytes [noreply]
value
例如:
add new_key 0 900 10
data_value
6.Memcached replace 命令
Memcached replace 命令用于替换已存在的 key(键) 的 value(数据值)。
如果 key 不存在,则替换失败,并且您将获得响应 NOT_STORED。
语法:
replace key flags exptime bytes [noreply]
value
例如:
add mykey 0 900 10
data_value
get mykey
replace mykey 0 900 16
some_other_value
7.Memcached append 命令
Memcached append 命令用于向已存在 key(键) 的 value(数据值) 后面追加数据 。
语法:
append key flags exptime bytes [noreply]
value
8.Memcached prepend 命令
Memcached prepend 命令用于向已存在 key(键) 的 value(数据值) 前面追加数据 。
用法:
prepend key flags exptime bytes [noreply]
value
例如:
set foo 0 900 9
memcached
STORED
get foo
VALUE foo 0 9
memcached
END
prepend foo 0 900 5
redis
STORED
get foo
VALUE foo 0 14
redismemcached
END
9.Memcached get 命令
Memcached get 命令获取存储在 key(键) 中的 value(数据值) ,如果 key 不存在,则返回空。
语法:
get key
多个 key 使用空格隔开,如下:
get key1 key2 key3
10.Memcached delete 命令
Memcached delete 命令用于删除已存在的 key(键)。
语法:
delete key [noreply]
11.Memcached incr 与 decr 命令
Memcached incr 与 decr 命令用于对已存在的 key(键) 的数字值进行自增或自减操作。
incr 与 decr 命令操作的数据必须是十进制的32位无符号整数。
如果 key 不存在返回 NOT_FOUND,如果键的值不为数字,则返回 CLIENT_ERROR,其他错误返回 ERROR。
incr 命令语法:
incr key increment_value
例如:
set no 0 900 2
10
incr no 5
decr 命令语法:
decr key decrement_value
例如:
decr no 5
5
12.Memcached stats 命令
Memcached stats 命令用于返回统计信息例如 PID(进程号)、版本号、连接数等。
stats
STAT pid 81160 //memcache服务器进程ID
STAT uptime 18639 //服务器已运行秒数
STAT time 1565081958 //服务器当前Unix时间戳
STAT version 1.4.15 //memcache版本
STAT libevent 2.0.21-stable //libevent版本
STAT pointer_size 64 //操作系统指针大小
STAT rusage_user 0.439147 //进程累计用户时间
STAT rusage_system 0.243970 //进程累计系统时间
STAT curr_connections 5 //当前连接数量
STAT total_connections 10 //Memcached运行以来连接总数
STAT connection_structures 7 //Memcached分配的连接结构数量
STAT reserved_fds 20 //内部使用的FD数
STAT cmd_get 42 //get命令请求次数
STAT cmd_set 24 //set命令请求次数
STAT cmd_flush 0 //flush命令请求次数
STAT cmd_touch 0 //touch命令请求总数
STAT get_hits 33 //get命令命中次数
STAT get_misses 9//get命令未命中次数
STAT delete_misses 1 //delete命令未命中次数
STAT delete_hits 2 //delete命令命中次数
STAT incr_misses 0 //incr命令未命中次数
STAT incr_hits 1 //incr命令命中次数
STAT decr_misses 0 //decr命令未命中次数
STAT decr_hits 3 //decr命令命中次数
STAT cas_misses 0 //cas命令未命中次数
STAT cas_hits 0 //cas命令命中次数
STAT cas_badval 1 //使用擦拭次数
STAT touch_hits 0 //touch命中次数
STAT touch_misses 0 //touch未命中次数
STAT auth_cmds 0 //认证命令处理的次数
STAT auth_errors 0 //认证失败数目
STAT bytes_read 1554 //读取总字节数
STAT bytes_written 3902 //发送总字节数
STAT limit_maxbytes 1073741824 //分配的内存总大小(字节)
STAT accepting_conns 1 //服务器是否达到过最大连接(0/1)
STAT listen_disabled_num 0 //失效的监听数
STAT threads 4 //当前线程数
STAT conn_yields 0 //连接操作主动放弃数目
STAT hash_power_level 16 //hash表等级
STAT hash_bytes 524288 //当前hash表大小
STAT hash_is_expanding 0 //hash表正在扩展
STAT bytes 74 //当前存储占用的字节数
STAT curr_items 1 //当前存储的数据总数
STAT total_items 21 //启动以来存储的数据总数
STAT expired_unfetched 0 //已过期但未获取大对象数目
STAT evicted_unfetched 0 //已驱逐但未获取大对象数目
STAT evictions 0 //LRU释放的对象数目
STAT reclaimed 4 //已过期的数据条目来存储新数据的数目
END
13.Memcached stats items 命令
Memcached stats items 命令用于显示各个 slab 中 item 的数目和存储时长(最后一次访问距离现在的秒数)。
stats items
STAT items:1:number 1 //该slab中对象数(不包含过期对象)
STAT items:1:age 884 //LRU队列中最老对象的过期时间
STAT items:1:evicted 0 //LRU释放对象数
STAT items:1:evicted_nonzero 0 //设置了非0时间的LRU释放对象数
STAT items:1:evicted_time 0 //最后一次LRU释放的对象存在时间
STAT items:1:outofmemory 0 //不能存储对象次数
STAT items:1:tailrepairs 0 //修复slabs次数
STAT items:1:reclaimed 4 //使用过期对象空间存储对象次数
STAT items:1:expired_unfetched 0//已过期但未获取的对象数目
STAT items:1:evicted_unfetched 0//已驱逐但未获取的对象数目
END
网友评论