memcache是一套分布式的高速缓存系统,由LiveJournal的Brad Fitzpatrick开发,但目前被许多网站使用以提升网站的访问速度,尤其对于一些大型的、需要频繁访问数据库的网站访问速度提升效果十分显著 。这是一套开放源代码软件,以BSD license授权发布。【摘取自百度百科】
分布式(集群):
缓存系统:严格意义上来说,memcache不是一个nosql的数据库,只是一个提供内存缓存功能的系统。那怎么理解别人说的memcache又是一个nosql数据库?首选说明一下什么是nosql(泛指非关系型数据库),关系型数据是基于二维表(实体和实体之间的关系就叫做关系型数据库),而非关系型数据库不使用SQL语句作为查询,使用key-value这种数据结构保存数据的数据库,而memcache本身是没有使用SQL语句作为查询的,所以他是nosql库。
2. 使用原理
在使用的时候,先从nosql数据库里面获取,有的话直接返回,没有的话就先从MySQL获取,然后缓存到memcache里面,下次直接从memcache里面返回
3. memcache与MySQL的区别
a. 没有使用SQL语句
b. memcache没有MySQL中的表的概念,都是使用key-value来保存的
c. memcache的数据是保存到内存中的,断电即丢失
注意:nosql的存在永远不是为了取代MySQL(关系型数据),是关系型数据的一个补充。因为关系型数据库有它独特的地方(事务,存储过程)。
1. Windows下安装
1.1 直接将memcached文件放置到某一文件夹下
1.2 在cmd下执行如下命令(把memcache直接拖到窗口加上 -p 11211 回车 不能关闭窗口)可以使用Ctrl+c 终止
1.3 查看是否启动(新开一个cmd窗口),执行如下命令查看是否有一个11211端口的程序在运行
# netstat -an
2. Linux下安装
2.1 环境准备
在Linux环境下,需要gcc、g-c++、make(makefile)、cmake、autoconfig(configure)、libtool等工具
在Linux下联网的情况下,使用如下命令
# yum install -y gcc make cmakeautoconfig libtool
-y 不需要使用确认交互式,即没有安装确认等麻烦提示
2.2 编译安装memcached
memcached依赖于 libevent库,因此需要先安装,分别到各自的官网下载稳定版
libevetnt官网:http://libevent.org/
memcache官网:http://memcached.org/
先编译安装libevent,在编译安装memcached,同时在安装memcached需要指定libevent的安装路径
具体步骤:
上传
a. 先下载libevent,解压,并安装(一般Linux下软件安装都是放在/usr/local/src目录下,安装的软件一般放在/usr/local/NAME)
# ./configure--prefix=/usr/local/libevent && make && make install
--prefix 指定安装路径
b. 安装memcache,解压、编译、安装
# ./configure --prefix=/usr/local/memcached--with-libevent=/usr/local/libevent && make && make install
--with-libevent 告诉memca libevent 的安装位置
2.3 memcached的启动
# /usr/local/memcached/bin/memcached -m 64-p 11211 -u nobody -vv
注意:此时memcached成功启动,但把信息输出到控制台。
如果想让memcached作为服务在后台启动,只需要加上-d选项
# /usr/local/memcached/bin/memcached -m 64 -p 11211-u nobody -d
如果需要查看参数信息,使用 memcached -h 查看帮助:
memcached的客户端与服务器端的通信很简单,基于文本的协议,类似http协议,可以直接使用Telnet来做交互
1. Windows和 Linux下一样
使用Telnet操作
进入
#telent localhost 11211
退出
输入quit命令,注意需要是另起一行(按一下回车)或者按Ctrl + ](随时使用)之后按Ctrl+c
2. 基本命令:
学习memcache的增删改查命令:
add key flag expire length
key: 名称
flag: 标记是一个16位的无符号整形数据,用来设置服务器端跟客户端一些交互的操作
expire:过期时间,memcache时间
length:数据长度(B)
※add 增加
# add name1 0 4
key 给值起一个名字叫“name”
flag 标志为一个正整数
expire 有效期 0 不过期
length 缓存的长度(B为单位)4
注意:
如何理解flag
memcached基于本文协议,所有的数据都是被当做字符串来存储的。那如何存储php中的对象和数组?
答:将数组序列化成字符串,取出的时候,然后反序列化成 数组/对象等
这个时候,就可以通过flag来标记如何发序列化。
比如:1 就是字符串 2 反序列化成数组 3 发序列化成对象
如何理解expire
设置缓存的有效期,有三种格式
1. 设置秒数,从设置开始,n秒后失效
2. 时间戳,到指定时间戳后失效
3. 设置为0,不自动失效(特别注意,不是永久有效。a. 在memcache安装时候,指定了一个最长的有效时间,默认是30天 b. 可能不到30天,就会被挤出去)
※delete 删除
#delete key
※replace 替换
#replace key flag expire length
※get 获取
# getkey
※set 如果数据有 replace 没有则 add
# setkey flag expire length
※incr 增加
# incrage NUMBER
※decr 减少
# decrage NUMBER
※stats 统计memcache服务器信息
#stats
※flush_all 清空所有数据
#flush_all
1. Windows下
a. 到(http://downloads.php.net/pierre/)下载扩展dll文件
b. 将该文件放到php的extension_dir对应的目录下
c. 修改php.ini文件,加入 extension=php_memcache.dll,引入该文件
d. 重启Apache
2. Linux下
a. 到(http://pecl.php.net/package/memcache)去下载扩展源码
b. 一般下载到 /usr/local/src 目录下,解压,并进入该文件夹内
c. 使用当前php的phpize命令创建configure文件(必须在扩展目录内)
# /usr/local/php/bin/phpize (绝对路径phpize)
d. 利用上面生成的configure文件,收集系统信息
# ./configure--with-php-config=/usr/local/php/bin/php-config
--with-php-config 告诉它php配置文件位置
e. 执行编译、安装
# make && make install
注意:可以查看上述命令执行完成之后的结构
# ls/usr/local/php/lib/php/extensions/no-debug-non-zts-20090626/
d. 修改php.ini配置文件,重启Apache
将上面生成的地址增加到php.ini配置文件,如下
extension_dir=/usr/local/php/lib/php/extensions/no-debug-non-zts-20090626/
extension=memcacahe.so
e. 测试
建立一个test.php文件,测试php是否有memcache的一个模块
php操作memcache,保存并获取值