首页 > 代码库 > memcache概述

memcache概述

一.memcache概述

1.介绍

memcache一款高性能的分布式的内存缓存系统,他是将我们的数据以键值对的形式存放在内存,从而可以提高数据的访问速度,从而提高网站的整体的响应速度.

原理图:

 

介质访问速度:数据库<文件<内存

 

memcache的使用场景:

因为memcache是将数据存放在内存中,不可将数据同步到硬盘中(不可以持久化),电脑一旦关机,内存中的数据就会丢失,所以不要存放重要的数据.

 

一般数据变化频繁,但是不重要的数据我们可以使用memcache缓存起来

2.memcache软件

memcache是一个c/s结构的软件,服务端可以在windowlinux中运行,客户端连接我们可以使用php,putty,secureCRT,telnet工具去操作memcache中的数据

 

3.memcache和mysql的一个区别

①存储数据的介质不同

mysql:是将数据存放在文件中的,操作它的时候需要磁盘的i/o开销

memcache:是将数据存放在内存中的,访问速度更加快

②存储数据的形式不同

mysql:是将数据存放在有行有列的二维表中

memcache:是将数据以键值(k-v)对的形式存储在内存中的

 

 

RDBMS:关系型数据库.mysql,sqlserver,oracle

nosql( not only sql):泛指非关系型数据库,产品有memcache,redis,mongdb

 

二.memcache服务软件的的安装

1.window中的memcache服务安装

第一步:把课件中的memcached.exe服务端软件复制到自己的目录中

 

第二步:memcached.exe的目录去安装启动memcache服务

 

-p:memcache监听的端口号,默认是11211

-l:memcache服务器的ip地址

-u:使用哪个用户启动memcache服务(linux中使用)

-m:使用的内存大小,默认是64M

-d install:安装服务

-d uninstall:卸载服务

-d start|stop|restart :开启|关闭|重启memcache服务

 

安装memcache服务(需要以管理员的身份去安装memcache服务):

 

 

如果安装memcache服务的时候报以下的错:

 

解决办法:

 

1-1:连接memcache服务器

①使用putty连接:

 

 

②使用telnet去连接memcache服务

 

使用telnet连接memcache服务器:

 

出现以下界面代表成功:

 

 

 

③使用secure-CRT工具连接memcache

 

 

 

 

2.linux中安装memcache服务

第一步:memcache所需要的源码包上传到linux中的目录中

 

第二步:安装memcache所依赖的事件库libevent

 a:解压并进入解压后的目录

 

 b:执行./configure指令,指定安装的路径

 

c:编译和安装

 

最后检查有没有所安装指定的目录:

 

第三步:安装memcache服务端的软件

a:解压并进入解压后的目录

 

b:执行./configure指令 ,指定安装路径和libevent的安装路径

 

c:编译和安装

 

检查有没有安装成功:

 

 

第四步:安装好后启动memcache服务

 

 

 

第五步:连接linuxmemcache服务

 

 

三.memcache常用的一些操作指令

1.命令清单

set name 0  0  3 :增加或者修改一个值

set:指令

键名:name

是否压缩:0-不压缩,1-压缩 (时间换空间还是空间换时间)

有效期:0代表永不过期,10为有效期为10

get name:获取一个键名为name的值

add name 0  0  3 :只能增加一个值

delete name:删除键名为name的值

replace name 0  0  3:替换键名为name的值

flush_all:清空memcache服务器所有的数据(此命令慎用)

incr age  整数值:自增

decr age 整数值:递减

stats:查看memcache服务器的状态

 

 

2.php操作memcache中的数据

①安装windowphp操作memcache的扩展库

 

 

 

需要重启apache服务器:

 

建立一php文件,写个phpinfo()函数测试,查看有没有memcache扩展:

 

2-1:php操作memcache中的数据

①使用php提供的内置类库去操作memcache中的数据

 

②具体用法

 

 

打印的结果:

 

总结:memcache可以存储标量和复合数据类型,还有null类型,只有资源类型的数据不可以存储

 memcache存储数组的时候底层已经把我们序列化存储了,取出来的时候,直接去即可.

 session存储数组也是不需要序列化的.

但是cookie存储数组是需要序列化的,用的时候需要反序列化

php序列化函数:serialize(),php反序列化函数:unserialize()

 

四.lamp环境中安装phpmemcache扩展

1.lamp中安装php的扩展步骤(面试题)

①需要把php对应的源码包拉到linux

②解压进入解压后的目录

③在解压的目录,执行php的安装目录中的phpize指令加载php的其他扩展程序,执行后会在解压的目录生成一个configure等文件

④在解压目录执行configure 并且指定phpphp-config文件路径

⑤编译和安装 ,执行完毕后会生成一个***.so的动态库文件

⑥在php配置文件php.ini中指定***.so的动态库文件的路径

⑦重启apache服务器,写个phpinfo的函数进行测试有没有对应的扩展出现

 

2.安装步骤

①需要把php对应的源码包拉到linux

 

②解压进入解压后的目录

 

③在解压的目录,执行php的安装目录中的phpize指令加载php的其他扩展程序,执行后会在解压的目录生成一个configure等文件

 

 

④在解压目录执行configure 并且指定phpphp-config文件路径

 

⑤编译和安装 ,执行完毕后会生成一个***.so的动态库文件

 

安装后生成一个目录,并且这个目录中有个扩展的memcache动态库:

 

⑥在php配置文件php.ini中指定***.so的动态库文件的路径

 

 

⑦重启apache服务器,写个phpinfo的函数进行测试有没有对应的扩展出现

 

 

五.memcache的分布式

1.介绍

 

 

 

 

因为单台的memcache服务器能力有限,我们可以设置多个memcache服务器组成一个分布式,这样抗压能力就更大.

memcache分布式中各台memcache服务器是不可以互相通信,我们可以通过客户端其实现通信,客户端可以使用php一个类库中addServer()函数可以实现分布式存储数据,

 

 

phpmemcache类库addServer()已经实现了分布式的算法,直接连接多台服务器即可:

2.php实现memcache分布式

 

 

3.雪崩现象

雪崩现象主要是出现在memcache分布式中,就是指当某一台服务器宕机(死机),那么之前请求这台服务器上面的所有的请求瞬间请求mysql数据库,瞬间mysql压力非常大.我们把这种现象称之为雪崩现象

 

六.memcache的应用场景

 

1.使用memcache缓存oa系统的公文列表的数据

第一步:在配置文件中增加memcache的缓存类型,并且指定memcache服务器的ip地址和端口号

 

第二步:使用TP框架中的S()方法实现数据的缓存

 

 

 

注意一点:如果用户对数据进行编辑和删除,我们需要对缓存中的数据进行情况,S()清空

$(‘lists’,null)

2.session存入nosql中

2-1.存储session的介质

session存储文件中(默认模式)

session入库(存入mysql)

建议不要入mysql数据库,因为每次操作session信息的时候都需要操作mysql数据库,

sessionnosql(memcache,redis(存储数据的类型更加丰富))

存入nosql是最好的方案,也经得住大并发的情况

 

面试题:session共享的问题

 :sessionnosql,或者入库

2-2.具体操作

需要修改session默认的存储机制,因为session信息默认是存放在文件中的,我们需要修改它相关的配置参数:

 

 

.memcache的一些特性

1.memcache的惰性失效机制

memcache中一个值失效了,并不会从memcache中立刻删除,只有发送get执行才会删除,

我们把这种机制称之为惰性失效机制

2.LRU删除机制

LRU:Least ReCent Used(最近最少使用,永久数据也会被剔出)

问题:如果memcache内存满了,在继续存入一个值,可以存进去吗?

:可以,只要最近最少使用的就会被踢出去,永久数据也会被剔出.

 

八.memcache的注意事项

1.键名不要超过250字节

2.存储的值不要超过2MB,存储一般的文章内容足够

3.有效期不可以超过30,超过30天有效期会从1970年开始算起,这时候早就过去了

 解决超过有效期超过30天办法:加时间戳即可 time()+31*3600*24

 

 

 

 

memcache概述