Memcache入门知识
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入门知识的更多相关文章
- [置顶] Mysql存储过程入门知识
Mysql存储过程入门知识 #1,查看数据库所有的存储过程名 #--这个语句被用来移除一个存储程序.不能在一个存储过程中删除另一个存储过程,只能调用另一个存储过程 #SELECT NAME FROM ...
- 移动H5开发入门知识,CSS的单位汇总与用法
说到css的单位,大家应该首先想到的是px,也就是像素,我们在网页布局中一般都是用px,但是近年来自适应网页布局越来越多,em和百分比也经常用到了.然后随着手机的流行,web app和hybrid a ...
- H5移动端开发入门知识以及CSS的单位汇总与用法
说到css的单位,大家应该首先想到的是px,也就是像素,我们在网页布局中一般都是用px,但是近年来自适应网页布局越来越多,em和百分比也经常用到了.然后随着手机的流行,web app和hybrid a ...
- Java web 入门知识 及HTTP协议详解
Java web 入门知识 及HTTP协议详解 WEB入门 WEB,在英语中web即表示网页的意思,它用于表示Internet主机上供外界访问的资源. Internet上供外界访问的Web资 ...
- Java基础入门知识
Java编程入门知识 知识概要: (1)Java入门基本常识 (2)Java的特性跨平台性 (3)Java的编程环境的搭建 (4)Java的运行机制 (5)第一个Java小程序入门 (1)Java ...
- zabbix入门知识
zabbix入门知识 zabbix中文手册 https://www.zabbix.com/documentation/3.4/manual/ 1.zabbix介绍 Zabbix 是一个企业级的分布式开 ...
- React的入门知识与概念【1】
回顾在以往的项目开发中,从最初的使用的原生html+js+css+jquery开发,到后来随着项目功能的增加,也渐渐学习了Vue.js框架的开发,以及Vue.js的全家桶Axios,Vue-route ...
- 我的Python笔记补充:入门知识拾遗
声明:本文整理借鉴金角大王的Python之路,Day1 - Python基础1,仅供本人学习使用!!! 入门知识拾遗 一.bytes类型 二.三元运算 1 result = 值1 if 条件 else ...
- 浅谈TCP IP协议栈(一)入门知识【转】
说来惭愧,打算写关于网络方面的知识很久了,结果到今天才正式动笔,好了,废话不多说,写一些自己能看懂的入门知识,对自己来说是一种知识的总结,也希望能帮到一些想了解网络知识的童鞋. 万事开头难,然后中间难 ...
随机推荐
- C语言数组作为函数参数
数组可以作为函数的参数使用,进行数据传送. 数组用作函数参数有两种形式,一种是把数组元素(下标变量)作为实参使用:另一种是把数组名作为函数的形参和实参使用. 数组元素作函数实参 数组元素就是下标变量, ...
- javascript的DOM操作(二)
<html> <title>学习DOM</title> <a id="wen">文本</a> <input nam ...
- CC3的多列属性Multi-column
CC3的多列属性Multi-column 一直都很想了解这个属性,总是忘了.今天可以研究一下,回想起想了解它的原因,大概是觉得它很容易分开几列.可能会有很多好处和方便. 0 16-09-17 1 16 ...
- Js与Jq 获取浏览器和对象值的方法
JS and Jquery 都能获取页面元素的宽度,高度和相对位移等数值,那他们之间能相互转换或替代吗,写法又有哪些差异呢?本文将详细为你介绍. 1.Js获取浏览器高度和宽度document.docu ...
- django解决跨域请求的问题
跨域请求可以用jsonp来解决,不过今天我发现一个很好用的包:django-cors-headers 只需要简单地配置一下就可 被请求方的setting.py中的配置如下: INSTALLED_APP ...
- 关于NGINX变量的一些测试结果
作为NGINX变量,不像正规语言那么正式. 但处理自定义和内部变量时,这些操作,也是少不了的. geo $dollar { default "$"; } server { list ...
- C++ crash 堆栈信息获取(三篇文章)
最近在做程序异常时堆栈信息获取相关工作,上一篇文章成功的在程序creash时写下了dump文件,而有些情况写dump文件是 不可以的,比如在jni开发时,C++只做底层处理,而整个项目是android ...
- 类linux 系统iptables 系统初始化配置
#!/bin/bash iptables -F iptables -X /etc/rc.d/init.d/iptables save service iptables restart iptables ...
- c++ windows下declspec
一.declspec #ifdef STATIC_LIBS #define DLL_API static #else #define DLL_API __declspec (dllexport) #e ...
- shell数组(产生不同的随机数)
#!/bin/bash # declare -a ARRAY read -p "Please input num[1-39]:" EMENUM #对比新生成的随机数是否重复 fun ...