Memcached之增删改查、incr/decr、stats、flush_all

本文深入解析Memcached的各种命令,包括add、delete、replace、get、set、incr/decr及stats等,阐述其功能与应用场景,如秒杀系统中的库存控制,并解释memcached的惰性删除机制。

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使用惰性删除机制

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值