Memcache 分布式缓存

概念

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中的数据不太安全。
解决办法:

  1. 将memcache服务器置于内网中,然后使用反向代理技术访问
  2. 只容许某个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

  1. 解压:[root@localhost memcache]# tar -zxvf libevent-2.0.20-stable (进入编译目录)
  2. 编译:[root@localhost libevent-2.0.20-stable]# ./configure --prefix=/usr/local/libevent
  3. 安装:[root@localhost libevent-2.0.20-stable]# make && make install

安装Memcache:

  1. 解压:[root@localhost memcache]# tar -zxvf memcached-1.4.20.tar.gz (进入编译目录)
  2. 编译:[root@localhost memcached-1.4.20]# ./configure --prefix=/usr/local/memcache --with-libevent=/usr/local/libevent
  3. 安装:[root@localhost memcached-1.4.20]# make && make install
  4. 启动:
    a. [root@localhost memcached-1.4.20]# cd /usr/local/memcache/bin
    b. [root@localhost bin]# ./memcached -u root -d start
  5. 检查:[root@localhost bin]# netstat -tunple | grep 11211

memcache实际应用:

  1. session 写入Memcache中
  2. 作为分布式存储系统:一个任务由多台服务器一起协调完成,如果一台服务器出现异常,整个任务链不能正常进行 addServer,依据键名实现分布式存储。
  3. 作为缓存系统使用

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作为缓存系统

  1. 读取数据时,先通过Memcache服务器读取,如果能读取到则直接使用,如果读取不到,则去数据库中查询,查询到以后将数据缓存到Memcache中
  2. 修改数据时,先将mysql中的数据修改掉,然后更新memcache缓存重点的数据(也可以之间删除对应的key)