memcached的使用场景:
1.数据库select出来的memcached处理 2.会话控制session的使用
memcached的基本设置:
-p 监听的端口
-l 连接的IP地址, 默认是本机
-d start 启动memcached服务
-d restart 重起memcached服务
-d stop|shutdown 关闭正在运行的memcached服务
-d install 安装memcached服务
-d uninstall 卸载memcached服务
-u 以的身份运行 (仅在以root运行的时候有效)
-m 最大内存使用,单位MB。默认64MB ,最大好像2G
-M 内存耗尽时返回错误,而不是删除项
-c 最大同时连接数,默认是1024
-f 块大小增长因子,默认是1.25
-n 最小分配空间,key+value+flags默认是48
-h 显示帮助
-P <file> 将PID写入文件<file>,这样可以使得后边进行快速进程终止, 需要与-d 一起使用
启动:memcached -d -u root -m 1024 -p 11211 -c 10240 -P /tmp/memcached.pid [端口可以更换,默认是11211]
退出:kill `cat /tmp/memcached.pid`
killall memcached
[ 另外一种pid不写入文件:启动: memcached -d -u root -m 1024 -p 11211 -c 10240
退出:kill mencached的进程id
]
查看memcached是否在运行:netstat tnl | grep memcached的进程端口 //netstat tnl | grep 1121;有信息显示则启动,否则没启动
————————————————————————————————————————————————————
memcached 的查看获取可以在telnet中获取和查看:
1.链接到memcached
telnet 192.168.58.128 [第二个参数是ip地址]
add name 0 60 5 [add是指令名, name是key的名字(以key/value存放),0 标志,60表示存放60秒,5表示放入5个字节的数据]如果key存在,再放入是失败。放入的数据必须要等于5个字节。否则报错。
get name //获取name的值
更新:
set name 0 60 5 //如果key存在就是更新,不存在,就是添加
删除:
delete key 值
清空:flush_all;
其他的命令看手册。
———————————————————分割线—————————————————————————————-
测试:memcached
1.php
$mem = new memcache;
$mem->connect(‘localhost’,11211);
$info = $mem->add(‘aa’,’hello,word’);
var_dump($info);就能查看到信息。
ps:对于memcache其他的函数的用法,见php手册。
———————————————————————分割线——————————————————————–
memcached在php中的运用:(看php手册)
使用memcached内存缓存,在php中,第一次查询把数据的key,放到memcached中,第二次同样查询的时候先访问memcached,看是否有对应的key,如果有就直接取出来;如果过期或没有,就会查询数据库,然后再一次存入memcached当中。以此重复。
例子:
$sid = $_GET[‘sid’];
//到memcached缓存当中查看是否有信息。
$mem = new memcace;
if($info = $mem->get($sid)){
//取出信息
echo $info;
exit;
}
如果没有;查询数据库
ob_start();
$sql=”…..”;
$sid = xxxxx;
//把从数据库中获取的结果,放到memcached当中;
$mem->add($sid,ob_get_contents(),MEMCACHE_COMPRESSED,60*60*24);
——————————————————————–分割线—————————————————–
多个memcached的使用,集群:
配置多个memcached服务器,那么网站就根据情况,均衡算法自动挑选合适的memcached服务器进行缓存;
$mem = new memcache;
$mem->connect(‘localhost’,11211);
$mem->addServer(‘192.168.1.100’,11211);
$mem->addServer(‘192.168.1.203’,11211);
$mem->addServer(‘192.168.1.14’,11211);
//其他一样使用还是一样不变。
$mem->add(‘name’,’shah’,0100);
具体看手册;
linux下memcached安全:
iptables -a input -p 协议 -s 可以访问ip -dport 端口 -j ACCEPT
—————————————————————————–分割线————————————————————
小结:
1.由于数据仅仅是存在内存当中,因此如果重启memcached、重启操作系统会导致数据全部消失,另外,内容容量达到指定值之后,就基于LRU(Least Recently Used)算法自动删除不使用的缓存。
2.memcached本身是为缓存而设计的服务器,没有考虑到数据的永久性问题,而且不支持备份和故障恢复,memcached还很浪费内存
基于上面2点,可以考虑用redis存储数据,他能将数据保存在内存中,并且定时向硬盘同步(redis是单线程,memcached是多线程)。