Memcache适合做缓存,是一款管理内存的很小的软件,实现对内存数据的管理,一般我们用memcache存储临时数据,因为内存不能储存永久化的数据,内存里面的数据,断电就消失了。

memcache可以存储任何的数据类型,数值,字符串,数值以及音频、视频等。

  memcache主要是做数据库和客户端的中间层来使用,memcache做缓存能大大提高数据的访问速度,减少客户端对数据库的请求。因为大部分时间将从memcache里面直接获取我们存储的数据。memcache可以使用多台服务器做分布式存储,这样实现多台服务器的高效工作。

memcache安装方法:

1.分别把memcached和libevent下载回来,放到 /tmp 目录下:
# cd /tmp
# wget http://www.danga.com/memcached/dist/memcached-1.2.0.tar.gz
# wget http://www.monkey.org/~provos/libevent-1.2.tar.gz

2.先安装libevent:
# tar zxvf libevent-1.2.tar.gz
# cd libevent-1.2
# ./configure –prefix=/usr
# make
# make install

3.测试libevent是否安装成功:
# ls -al /usr/lib | grep libevent
lrwxrwxrwx 1 root root 21 11?? 12 17:38 libevent-1.2.so.1 -> libevent-1.2.so.1.0.3
-rwxr-xr-x 1 root root 263546 11?? 12 17:38 libevent-1.2.so.1.0.3
-rw-r–r– 1 root root 454156 11?? 12 17:38 libevent.a
-rwxr-xr-x 1 root root 811 11?? 12 17:38 libevent.la
lrwxrwxrwx 1 root root 21 11?? 12 17:38 libevent.so -> libevent-1.2.so.1.0.3
还不错,都安装上了。

4.安装memcached,同时需要安装中指定libevent的安装位置:
# cd /tmp
# tar zxvf memcached-1.2.0.tar.gz
# cd memcached-1.2.0
# ./configure –with-libevent=/usr
# make
# make install
如果中间出现报错,请仔细检查错误信息,按照错误信息来配置或者增加相应的库或者路径。
安装完成后会把memcached放到 /usr/local/bin/memcached ,

5.测试是否成功安装memcached:
# ls -al /usr/local/bin/mem*
-rwxr-xr-x 1 root root 137986 11?? 12 17:39 /usr/local/bin/memcached
-rwxr-xr-x 1 root root 140179 11?? 12 17:39 /usr/local/bin/memcached-debug

启动Memcached服务
1.启动Memcache的服务器端:
# /usr/local/bin/memcached -d -m 10 -u root -l 192.168.141.64 -p 12000 -c 256 -P /tmp/memcached.pid

-d选项是启动一个守护进程,
-m是分配给Memcache使用的内存数量,单位是MB,我这里是10MB,
-u是运行Memcache的用户,我这里是root,
-l是监听的服务器IP地址,如果有多个地址的话,我这里指定了服务器的IP地址192.168.0.200,
-p是设置Memcache监听的端口,我这里设置了12000,最好是1024以上的端口,
-c选项是最大运行的并发连接数,默认是1024,我这里设置了256,按照你服务器的负载量来设定,
-P是设置保存Memcache的pid文件,我这里是保存在 /tmp/memcached.pid,

常见问题:

1.如果启动Memcached服务的时候遇到了

/usr/local/bin/memcached: error while loading shared libraries: libevent-1.2.so.1: cannot open shared object file: No such file or directory;

解决方案:

[root@localhost bin]# LD_DEBUG=libs memcached -v 
[root@localhost bin]# ln -s /usr/lib/libevent-1.2.so.1 /usr/lib64/libevent-1.2.so.1
[root@localhost bin]# /usr/local/bin/memcached -d -m 100 -u root -p 12000 -c 1000 -P /tmp/memcached.pid
[root@localhost bin]# ps -aux

可以看到启动的Memcached服务了

安装php操作memcached服务器的扩展库:

php连接memcached缓存服务器的客户端有两个,一个是memcache是比较底层的开发库,memcached是比较新的开发库,php安装这两个扩展中的任意一个后就可以在编写php代码时使用的memcached缓存数据,达到缓存php执行的结果

1 安装memcache扩展

->下载memcache源码包(下载地址:http://pecl.php.net/package/memcache)

wget http://pecl.php.net/get/memcache-3.0.8.tgz

->解压缩

tar zxvf memcache-3.0.8.tgz

cd  memcache-3.0.8

./configure --enable-memcache=/usr/local/memcached --with-php-config=/usr/local/php5/bin/php-config --with-apxs2=/usr/sbin/apxs

make

make install

->make install之后提示

Installing shared extensions: /usr/local/php5/lib/php/extensions/no-debug-non-zts-20100525/

->然后修改php.ini,

把 extension_dir = "./" 修改为 extension_dir = "/usr/local/php5/lib/php/extensions/"

->然后添加一行
  extension="no-debug-non-zts-20100525/memcache.so"

2 安装memcached扩展(略)

Memcached客户端命令

stats:服务器运行状态信息
add:添加键值对到memcache
set:添加键值对,如果键已经存在就修改
格式:set <键> <标记> <有效期> <数据长度> <值>
标记--没什么实际用处,随便写个数字就行
有效期--单位秒,0代表永久有效
数据长度:在客户端写命令要指定数据长度,在php扩展里面不用指定,在客户端存储的数据必须跟指定长度相等 get:获取数据,格式: get <键>
delete:删除指定数据 格式:delete <键>
flush_all:清空所有数据

Memcached错误提示命令

ERROR:普通错误,比如指令错误
CLIENT_ERROR:客户端错误
SERVER——ERROR:服务器端错误

 

PHP使用memcache扩展库操作memcached

//创建实例
$m = new memcache;
//连接memcached服务器
$m->connect('主机IP','端口号');
//增加一个条目到缓存服务器
$m->add('key','value',MEMCACHE_COMPRESSED,$expire)
说明:$expire -- 有效期单位是秒,设置为0表示永远不过期,但是秒数不超过30天,如果超过30天,使用time()+超过30天的秒数
MEMCACHE_COMPRESSED -- 指定压缩
//删除一个条目
$m->delete('key',$timeout=);
说明:第二个参数是指定多久后删除,不填默认是立即删除
//清洗(删除)已经存储的所有的元素
$m->flush();
//返回对应key的值,如果不存在返回false
$m->get('key');
说明:key可以是单个key或key数组
//存储一个key-value到服务器,如果key存在就修改
$m->set($key,$value,MEMCACHE_COMPRESSED,$expire);
说明:资源类型变量(比如文件或连接)不能被存储在缓存中,因为它们在序列化状态不能被完整描述
//关闭连接
$m->close();

 

memcache分布式存取

  memcache分布式存取的原理是同时连接多台memcached服务器,让数据均匀的分布到每台服务器,从而提高memcache缓存的存取效率。memcached会把数据分派到每台服务器里面,我们不需要管具体怎么分派和读取数据,memcached自动帮我们完成。memcache的分布式存取很方便,只需要一个把服务器添加到连接池里面就完成了。

使用php的memcache扩展库来添加服务器到连接池里面

//向连接池里面添加一台或者多台服务器,可以通过参数来指定每台服务器的权重
$m->addServer('IP',port);
$m->addServer('IP2',port2);
...

memcache安全防护

memcache没有自带用户验证功能,这样每个用户都可以直接连接memcached服务器,完全的暴露数据是不安全的,我们需要做好安全防护措施,一般用两种方式来防护:1 启动memcached服务器的时候绑定IP,指定的IP才可以访问

2 设置防火墙

Memcache入门知识的更多相关文章

  1. [置顶] Mysql存储过程入门知识

    Mysql存储过程入门知识 #1,查看数据库所有的存储过程名 #--这个语句被用来移除一个存储程序.不能在一个存储过程中删除另一个存储过程,只能调用另一个存储过程 #SELECT NAME FROM ...

  2. 移动H5开发入门知识,CSS的单位汇总与用法

    说到css的单位,大家应该首先想到的是px,也就是像素,我们在网页布局中一般都是用px,但是近年来自适应网页布局越来越多,em和百分比也经常用到了.然后随着手机的流行,web app和hybrid a ...

  3. H5移动端开发入门知识以及CSS的单位汇总与用法

    说到css的单位,大家应该首先想到的是px,也就是像素,我们在网页布局中一般都是用px,但是近年来自适应网页布局越来越多,em和百分比也经常用到了.然后随着手机的流行,web app和hybrid a ...

  4. Java web 入门知识 及HTTP协议详解

     Java  web  入门知识 及HTTP协议详解 WEB入门 WEB,在英语中web即表示网页的意思,它用于表示Internet主机上供外界访问的资源. Internet上供外界访问的Web资 ...

  5. Java基础入门知识

    Java编程入门知识   知识概要: (1)Java入门基本常识 (2)Java的特性跨平台性 (3)Java的编程环境的搭建 (4)Java的运行机制 (5)第一个Java小程序入门 (1)Java ...

  6. zabbix入门知识

    zabbix入门知识 zabbix中文手册 https://www.zabbix.com/documentation/3.4/manual/ 1.zabbix介绍 Zabbix 是一个企业级的分布式开 ...

  7. React的入门知识与概念【1】

    回顾在以往的项目开发中,从最初的使用的原生html+js+css+jquery开发,到后来随着项目功能的增加,也渐渐学习了Vue.js框架的开发,以及Vue.js的全家桶Axios,Vue-route ...

  8. 我的Python笔记补充:入门知识拾遗

    声明:本文整理借鉴金角大王的Python之路,Day1 - Python基础1,仅供本人学习使用!!! 入门知识拾遗 一.bytes类型 二.三元运算 1 result = 值1 if 条件 else ...

  9. 浅谈TCP IP协议栈(一)入门知识【转】

    说来惭愧,打算写关于网络方面的知识很久了,结果到今天才正式动笔,好了,废话不多说,写一些自己能看懂的入门知识,对自己来说是一种知识的总结,也希望能帮到一些想了解网络知识的童鞋. 万事开头难,然后中间难 ...

随机推荐

  1. ECSHOP_百度收录网址后面有?from=rss

    ecshop的feed.xml文件中间添加了?from=rss,百度蜘蛛抓取收录后,会出现frome页面,导致商品列表重复抓取,访问出错. 修改方法简单: 在根目录下的feed.php找到(八处), ...

  2. 分享到QQ空间、新浪微博、腾讯微博的代码!

    给网页加上分享代码,借助网友的力量推广网站,目前已经很流行了 以下是网页代码 QQ空间分享代码如下: <a href="javascript:void(0);" onclic ...

  3. python爬虫下载youtube单个视频

    __author__ = 'Sentinel'import requestsimport reimport jsonimport sysimport shutilimport urlparse &qu ...

  4. 关于String s = new String("xyz"); 创建几个对象的问题

    引用自这位朋友:http://blog.sina.com.cn/s/blog_6a6b14100100zn6r.html 你知道在java中除了8中基本类型外,其他的都是类对象以及其引用.所以 &qu ...

  5. Java学习笔记--多线程

    rollenholt的博文:http://www.cnblogs.com/rollenholt/archive/2011/08/28/2156357.html 弹球例子: 0. 创建Bounce框架 ...

  6. [UVA] 784 - Maze Exploration

      Maze Exploration  A maze of rectangular rooms is represented on a two dimensional grid as illustra ...

  7. VS代码生成工具ReSharper使用手册:配置快捷键

    原文 http://www.cnblogs.com/PHPIDE/archive/2013/05/16/3081783.html VS代码生成工具ReSharper提供了丰富的快捷键,可以极大地提高你 ...

  8. Linux下Bash运行脚本

    命令行应该这样写: sh -c "脚本字符串" example: sh -c "if ! type dpkg > /dev/null ; then echo 'so ...

  9. git:fatal the current branch master has no upstream branch

    git push的时候发生上述错误. git push -u "resp" master resp为git仓库的“地址” reference中由解决方案 http://blog.c ...

  10. GestureDetector和SimpleOnGestureListener的使用教程

    1. 当用户触摸屏幕的时候,会产生许多手势,例如down,up,scroll,filing等等,我们知道View类有个View.OnTouchListener内部接口,通过重写他的onTouch(Vi ...