Memcached基础
memcached中的一些参数限制
Key的长度:250字节(二进制协议支持65536个字节)
Value的限制:1M,一般都是存储一些文本,如新闻列表等等这个值足够了
内存的限制:32位下最大设置到2G
如果有30G数据要缓存,一般也不会单实例装30G(不要把鸡蛋装在一个篮子里)
一般建议 开启多个实例(可以在不同的机器,或者同机器不同端口多开几个)
增:add往内存增加一行新记录
语法:add key flag expire length
- Key 给值起一个独特的名字
- Flag 标志,要求为一个正整数
- Expire 有效期
- Length 缓存的长度(字节为单位)
Flag的意义:
Memcached基本文本协议,传输的东西,理解成字符串来存储
想让你存一个Php对象和一个Php数组怎么办?
答:序列化成字符串,往出取的时候,自然还要反序列成对象/数组/json格式等等
这时候flag的意义就体现出来了
比如:1、就是字符串 2、反转成数组 3、反序列化对象...
Expire的意义:
设置缓存的有效期有3种格式
1、设置秒数,从设定开始数,第N秒后失效
2、时间戳,到指定的时间戳后失效
比如在团购网站缓存的某团到中午12:00失效
3、设为0,不自动失效
但是设置为0不是永久有效的,编译memcached时,指定一个最长常量默认是30天,所以,即使设为0,30天后也会失效
可能等不到30天,就会被新数据挤出去
Replace替换
Replace key flag expire length
参数和add完全一样,不单独写
Delete删除
Delete key
Delete key [time seconds]
加秒数之后,是指,被删除的key,N秒内不能再用,目的是让网站上的页面缓存也代谢完毕
Get查询
get key
返回key的值
Set是设置和修改值
参数和add,replace一样,但功能不一样
add 是在Key不存在时,才能建立此键值
对于已经存在的键,可以用replace进行替换/更改
replace则只能对于已经存在的键做修改,不存在则不成功
set相当于add replace两者功能
Incr增长
incr age 1
年龄这个键的值增长1
Decr减少
decr age 2
年龄这个键的值减少2
应用场景
秒杀功能:
一个人下单,要牵涉数据库读取,写入订单,更改库存,及事务要求,对于传统型数据库来说。压力是巨大的
可以利用memcached的decr功能,在内存存储count库存量,秒杀1000台
set count 0 0 3
1000
decr count 1
最后到了0,就不能抢了
每个人抢单主要在内存操作,速度非常快
抢到count小于等于1000号的人,得到订单号,再去另外一个页面进行支付
stats
统计所有信息
flush_all
清空所有存储的对象
(惰性删除)