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. 浅析 JavaScript 组件编写

    之前因项目需要也编写过一些简单的JS组件,大多是基于JQuery库的,一直也没有过总结,导致再次写到的时候还去Google, 近日看到一个文章总结的挺好,拿过整理一下做个备忘. 此次同样是基于jque ...

  2. 学习hadoop

    一.笔记本触摸板关闭方法 1.在windows下有官方驱动. 2.ubuntu下没有 操作方法如下: 1,终端操作 临时禁止触摸板:sudo modprobe -r psmouse 开启触摸板:sud ...

  3. EF数据迁移(当模型改变时更新数据库)

    https://msdn.microsoft.com/zh-CN/data/jj591621 Enable-Migrations Add-Migration 名称 Update-Database –V ...

  4. 云风:我所偏爱的C语言面向对象编程范式

    面向对象编程不是银弹.大部分场合,我对面向对象的使用非常谨慎,能不用则不用.相关的讨论就不展开了. 但是,某些场合下,采用面向对象的确是比较好的方案.比如 UI 框架,又比如 3d 渲染引擎中的场景管 ...

  5. Linux下装VirtualBox

    一:下载 进入VirtualBox的下载地址:https://www.virtualbox.org/ 点击左侧的download, 选择适合自己系统的版本,我的是红帽,故选择: 进行下载. 二:安装 ...

  6. XML基础<第一篇>

    一.XML简介 XML是一种标记语言,用于描述数据,它提供一种标准化的方式来来表示文本数据.XML文档以.xml为后缀.需要彻底注意的是XML是区分大小写的. 先从一个简单的XML例子来了解下xml基 ...

  7. Linux 下的下载文件命令

    普通文件只需 wget  fileAddr 下载带有登录验证的文件 [chen@localhost Downloads]$ wget --user='av\bname' --ask-password ...

  8. 在iOS上present一个半透明的viewController

    UIViewController *viewController = [[UIViewController alloc]init]; UIViewController* controller = se ...

  9. OpenReports中文支持方案

    此文章在<OpenReports中文支持完全解决方案.doc>的基础上做优化,并贴出代码.已测试通过. 一.主要解决的问题 1 页面显示支持中文 2 与服务器或数据库的交互支持中文 3 查 ...

  10. c++之 scanf 接收用户输入内容

    该代码全部在Visual Studio 2015中编写,有关VS2015的安装后期在写相关的博客 scanf 介绍 在程序开发中,有时候需要通过获取用户输入的数据,进行对应的操作,scanf就是用来接 ...