add
添加
注意:如果memcached中有<key>,那么再次add该<key>,将添加失败
add <key> <flags> <exptime> <bytes> \r\n
<datablock> \r\n
delete
删除
delete <key>
delete <key> [seconds] 加秒数是指:被删除的key,seconds秒内不能再用,是让网站上主页上的页面缓存也代谢完毕
replace
修改
注意:replace只能对已经存在的键<key>做修改
replace <key> <flags> <exptime> <bytes> \r\n
<datablock> \r\n
add class 0 0 4 添加class=kobe
kobe
STORED
replace class 0 0 5 更改class=james
james
STORED
get
查询
Get <key>
set
设置、修改值
注解:与add、Replace参数一样,但是功能不一样
如果memcached中有<key>,那么set该<key>,就相当于修改<key>
如果memcached中没有<key>,那么set该<key>,就相当于添加<key>
incr
增加 decr
减少
注意:把值理解为32位无符号±操作的,意味着值的区间在[0~2^32-1]
incr <key> num 给key增加num
例:
add age 0 0 2
10
STORED
incr age 4
14
应用场景:大公司面试之秒杀功能
一个人下单,要牵涉到数据库读取,写入订单,更改库存,以及事务要求,对于传统型数据库来说,如果一直读写磁盘,压力是巨大的。
而实际上秒杀系统是这样做的:抢到的是一个名额(资格),此时并没有写数据库,之后才填写订单号,个人信息。
可以利用memcached的incr/decr功能,在内存存储count库存量,秒杀1000台,每人抢单主要在内存操作,速度非常快,抢到名额的人每人发一个订单号,再去另一个页面支付。
stats
查看状态
stats
STAT pid 3535 # 启动memcached的进程
STAT uptime 4506 # memcached启动持续了多长时间
STAT time 1544536891 # 当前时间戳
… …
STAT max_connections 1024
STAT curr_connections 2 # 当前有几个连接
STAT total_connections 6 # 历史上连接了几个
STAT rejected_connections 0
STAT connection_structures 3
STAT reserved_fds 20
STAT cmd_get 9 # 请求key
STAT cmd_set 17
STAT cmd_flush 0
STAT cmd_touch 0
STAT get_hits 6 # get返回成功 ==> 计算出缓存命中率
STAT get_misses 3 # get返回失败
… …
STAT curr_items 4 # 当前有几个有效的key
STAT total_items 9 # 古往今来,一共存储过多少个key
… …
END
flush_all
清空所有的存储对象
Q:为什么使用flush_all清空所有的存储对象,调用get <key>不能得到响应的key,但是使用stats却发现STAT curr_item 6(表示当前数据库中存放的key为6,而不是0),为什么呢?
A:memcached使用惰性删除机制。