自由开源的,高性能,分布式内存对象缓存系统php
做用: 数据缓存 存储session 短信验证码存储
安装
memcached是基于libevent,因此安装memcached以前须要安装libeventredis
set命令
将value(数据值)存储到指定的key(键)中,若是指定的key已经存在,更新key所对应的值
语法:
set key flags expire bytes
参数:
key 键值key-value结构中的key,用于查找缓存
flags 能够包括键值对的整型参数,客户机使用它存储关于键值对的额外信息
expire 在缓存中保存键值对的时间长度 以秒为单位 0 表示永久
bytes 在缓存中存储的字节长度
value 存储的值
输出信息
stored 表示存储成功
error 保存信息出错算法
get命令
获取存储在key(键)中的value(数据值)
语法
get key1 key2 key3 sql
gets命令
获取带有cas令牌存的value(数据值)
若是key不存在,则返回空
语法
gets key1 key2 key3
在使用gets命令的输出结果中,在最后一列的数字表明当前key的cas令牌数据库
cas命令
检查并设置,这个命令仅在当前客户端最后一次取值后,该key对应的值没有被其余客户端修改的状况下,才能将值写入
语法
cas key flags expire bytes unique_cas_token
key 键值key-value结构中的key,用于查找缓存值
flags 能够包括键值对的整型参数,客户机使用它存储关于键值的额外信息
expire 在缓存中保存键值对的时间长度 以秒为单位 0 表示永久
bytes 在缓存中存储的字节数
unique_cas_token 经过gets命令获取的惟一的64位值
value 存储的值缓存
delete命令
删除已经存在的key(键)
delete key
语法:
delete key
参数说明
key 键值对key-value结构中的key,用于查找缓存值
输出值说明
deleted 成功
error 语法错误或删除失败
not_found key 不存在安全
prepend / append 命令
在前面追加
prepend key flags expire bytes服务器
在后面追加
append key flage expire bytes
参数说明
key 键值key-value结构中的key,用于查找缓存值
flags 能够包括键值对的整型参数
expires 在缓存中保存键值对的时间长度 单位是秒 0 表示永久有效
bytes 在缓存中的字节长度
value 存储的值
输出的信息
stored 成功
not stored 存储失败
client error 错误cookie
incr / decr 命令
对已存在的key(键)的数字值进行自增或自减操做
incr与decr命令操做的数据必须是十进制32位无符号整数
若是key不存在返回not found 若是键的值不为数字,则返回client error 其余错误返回error
语法
incr key increment_value
decr key decrement_value
参数说明
key 键值key-value结构中的key,用于查找缓存值
increment_value:增长的数值
decrement_value:减小的数值session
add 命令
将value(数据值)存储在指定的key(键)中
若是add的key已经存在,则不会更新数据,以前的值仍然保持相同,而且将得到not stored
语法
add key flags expire bytes
参数说明
key 键值key-value结构中的key 用于查找缓存值
flags 能够包括键值对的整型参数
expire 在缓存中保存键值对的时间长度 单位为秒 0 表示永久
bytes 在缓存中存储的字节长度
安装libmemcached=>安装memcached=>安装php-memcached扩展
cookie与session
一、http request =》 二、http reponse+set cookie (sessionId) =》 三、http request+cookie => 四、http response
file存储session的缺点:
一、文件IO读写慢 二、分布式受限制
存储session方式
文件缓存 redis缓存 memcahce缓存
重置服务器地址 $cache->resetServerList(); $cache->addServers( array(127.0.0.1,11211,60), array(127.0.0.1,11212,40), )
第三个参数对应服务器中的权重,来控制服务器被选中的几率
$cache->setMulti( array( key1=>value1, key2=>value2, key3=>value3 ),time()+900 ); $cache->get(key1); $cache->getMulti(key1,key2,...); //cas数据惟一性 多服务端 并发场景下 $cache->get('k1',null,$cas);
抢座买票 $cache->add(key,value,time()+900); $cache->increment(key,incr); $cache->decrement(key,decr);
incr与decr命令操做的数据必须是十进制的32位无符号整数,结果不会出现负值
注意事项
value < 1M key < 512 缓存实践 < 30 day Mysql数据同步更新
优点
特征
使用memcached实现分布式算法
分布式算法之余数计算分散法
根据key来计算CRC,而后结果对服务器数进行取模获得memcached服务器节点,服务器没法连接的时候,将尝试的连接次数加到key后面从新计算
缺点:添加或移除服务器时,几乎全部缓存将重建,还考虑雪崩式崩溃问题
分布式算法之一致性哈希算法
优势:冗余少 负载均衡 过分平滑 存储均衡
使用memcached实现session共享
session存放在公用的memcached中,实现多服务器共享 缺点:集群错误会致使用户没法登录,回收机制可能致使用户掉线