概念
Memcache是一套分布式高速缓存系统,分布式是说你可以在多台服务器上安装Memcache服务,这样可以达到一个很好的集群效果,
高速是因为Memcache所有的数据都是保存在内存中的,读取速度比存储在硬盘中的数据快的多。
Memcache的作用,但应用访问量特别大的时候,数据库的访问量也特别大。Memcache就是在应用与数据库之间的一个缓冲层。第一次读取数据库之后就可以保存到Memcache中,之后可以优先通过Memcache访问
Memcache可以理解为只有一张表的数据库,只有两个字段,分别是主键key和字段
Memcache是非持久化储存,一定要保存对数据的存储要求并不是特别高,即使数据丢失也不会对我们的数据造成太大的影响
Memcache是分布式的存储,对于内存的消耗是特别大的,如果是单机的情况,不建议使用Memcache
格式简单,key与value,保存除了资源以外的所有数据,都是通过内部序列化与反序列化的机制进行数据的存储的。
memcache的常用参数
-p:指定memcache的tcp协议使用的端口号
-d :start/stop:memcache的启动/关闭
-d: install/uninstall :memcache服务的安装/卸载
-u:指定用户名,此参数只在Linux下使用
-m:表示memcache能够使用的最大的内存,默认64M
-c:表示指定memcache能够接受的最大的并发量,默认是1024个
在memcache中没有账号密码,因此memcache中的数据不太安全。
解决办法:
- 将memcache服务器置于内网中,然后使用反向代理技术访问
- 只容许某个IP地址可以访问,通过服务器防火墙的配置
memcache中常用的操作指令
set:
作用:是用于设置(添加,修改)某个数据
语法:set keyname(键名) 0|1(数据是否压缩处理) exprie(有效时间) length(字符长度)
Value(具体的数据)
注意写入具体的value数据时有回车换行操作
get:
作用:获取某个键的值
语法:get keyname
add:
作用:添加某个键
语法:add keyname(键名) 0|1(数据是否压缩处理) exprie(有效时间) length(字符长度)
Value(具体的数据)
delete:
作用:删除某个键
语法:delete 键名
incr:
作用:自增长
语法:incr keyname num(具体增长的值)
decr:
作用:自减
语法: decr keyname num
flush_all:
作用:清除所有的键
语法:flush_all
stats
作用:表示memcache服务器状态
语法:stats
对于memcache有一个命中率来衡量服务器性能如何
命中率=get_hits/cmd_get*100%
存储数据类型
memcache支持php中的除了资源类型外其他的都可以存储
Linux下安装memcache服务
关闭防火墙service iptables stop
安装libevent
- 解压:
[root@localhost memcache]# tar -zxvf libevent-2.0.20-stable
(进入编译目录) - 编译:
[root@localhost libevent-2.0.20-stable]# ./configure --prefix=/usr/local/libevent
- 安装:
[root@localhost libevent-2.0.20-stable]# make && make install
安装Memcache:
- 解压:
[root@localhost memcache]# tar -zxvf memcached-1.4.20.tar.gz
(进入编译目录) - 编译:
[root@localhost memcached-1.4.20]# ./configure --prefix=/usr/local/memcache --with-libevent=/usr/local/libevent
- 安装:
[root@localhost memcached-1.4.20]# make && make install
- 启动:
a.[root@localhost memcached-1.4.20]# cd /usr/local/memcache/bin
b.[root@localhost bin]# ./memcached -u root -d start
- 检查:
[root@localhost bin]# netstat -tunple | grep 11211
memcache实际应用:
- session 写入Memcache中
- 作为分布式存储系统:一个任务由多台服务器一起协调完成,如果一台服务器出现异常,整个任务链不能正常进行 addServer,依据键名实现分布式存储。
- 作为缓存系统使用
session写入Memcache中:
写入文件中:
session过多,会导致文件过多,查询效率变慢
负载均衡的项目不能正常使用写入数据库中:
session_save_handle($open,$close,$read,$write,$destroy,$gc)
写入Memcache中:
session_save_handle();
设置配置文件
ini_set(‘session.save_handle’,’Memcache’);
ini_set(‘session.save_path’,’tcp://127.0.0.1:11211’);
Memcache作为缓存系统
- 读取数据时,先通过Memcache服务器读取,如果能读取到则直接使用,如果读取不到,则去数据库中查询,查询到以后将数据缓存到Memcache中
- 修改数据时,先将mysql中的数据修改掉,然后更新memcache缓存重点的数据(也可以之间删除对应的key)