Memcached安装及配置
一、Memcached介绍
1、Memcached是国外社区网站LiveJournal团队开发,通过缓存数据库查询结果,减少数据库访问次数,从而提高动态web站点性能。
2、官方站点http://memcached.org
3、基于c/s架构,协议简单
4、基于libevent的事件处理
5、自主内存存储管理(slab allowcation)
6、数据过期方式:Lazy Expiration和LRU
7、程序员在开发时,自行调用Memcached的API,Memcached的功能才能生效
Memcached:指的是服务器Server
memcached:指的是php连接memcached服务可以使用的扩展,
memcache:php连接Memcached服务可以使用的另一个扩展,没有memcached强大
libmemcached:C库
二、Slab allocation
1、Slab Allocation的原理--将分配的内存分割成各种尺寸的块(chunk),并把尺寸相同的块分成组(chunk的集合),每个chunk集合被称为slab;
2、Memcached的内存分配以Page为单位,Page默认值为1M,可以在启动时通过-l参数来指定;
3、Slab是由多个Page组成的,Page按照大小切割成多个chunk。
4、slab class:特定大小的chunk组
三、Growth factor
1、memcached在启动时通过-f选项可以指定Growth Factor因子。改值控制chunk大小的差异。默认值为1.25;
2、通过memcached-tool查看指定memcached实例的不同slab状态,可以看到个Item所占大小(chunk大小)差距为1.25
3、命令:# memcached-tool 127.0.0.1:11211 display
四、Memcached数据过期方式
1、Layy Expiration
memcached内部不会监视记录是否过期,而是在get时查看记录的时间戳,检查记录是否过期。这种技术被称为lazy(惰性)expiration。因此,memcached不会再过期监视上耗费CPU时间。
2、LRU(Least Recently Used)
memecached会优先使用已超时的记录的空间,但即使如此,也会发生追加新纪录时空间不足的情况,此时就要使用名为Least Recently Used(LRU)机制来分配空间。顾名思义,这是删除“最近最少使用”的记录的机制。因此,当内存空间不足时(无法从slab class获取到新的空间时),就从最近未使用的记录中搜索,并将七空间分配给新的记录。从缓存的使用角度来看,该模型十分理想。
五、Memcached安装
1、安装epel扩展源
# yum -y install epel-release
2、memcached是基于libevent的,libmemcached是memcached的工具
# yum -y install libevent memcached libmemcached
3、启动memcached
# /etc/init.d/memcached start
4、memcache启动时的参数要在/etc/sysconfig/memcached文件中配置
# vim /etc/sysconfig/memcached
5、Memcached启动时参数
-d:选项是启动一个守护进程
-m:是分配给Memcached使用的内存数量,单位是MB
-M:内存耗尽时返回错误而并非删除条目
-u:是运行Memcached的用户,如果当前为root的话,需要使用此参数指定用户
-l:是监听的服务器的IP地址
-p:是设置Memcached监听的端口,默认是11211
-c:选项是最大运行的并发连接数,默认是1024
-n:chun的初始大小,key+value+flags,默认为48
-P:是设置保存Memcached的pid文件
六、查看memcached运行状态
1、# memcached-tool 127.0.0.1 stats
2、# echo stats | nc 127.0.0.1 11211需要安装nc的rpm包
# yum -y install nc
3、# memstat --servers=127.0.0.1:11211需要安装libmemcached
的rpm包
七、Memcached命令行
通过telnet连接Memcached
# telnet 127.0.0.1 11211
存取数据
set key1 0 300 2
12
STORED
get key1
VALUE key1 0 2
12
END
八、Memcached语法规则
<command name><key><flags><exptime><bytes>\r\n<data block>\r\n
注:\r\n在windows下是Enter键
1、<command name>可以是“set”,“add”,“replace”。
“set”表示按照相应的<key>存储该数据,没有则增加,有则覆盖
“add”表示按照相应的<key>添加该数据,但是如果该<key>已经存在则会操作失败
“replace”表示按照相应的<key>替换数据,但是如果该<key>不存在则会操作失败
2、<key>客户端需要保存数据的key
3、<flags>是一个16位的无符号的证书(以十进制的方式表示)。该标志将和需要存储的数据一起存储,并在客户端get数据时返回。客户可以将此标志用作特殊用途,此标志对服务器来说是不透明的。
4、<exptime>过期时间
若为0表示存储的数据永远不过期(但可被服务器算法:LRU等替换)。如果非0(unix时间或者距离此时的秒数),当过期后,服务器可以保证用户得不到该数据(以服务器时间为准)
5、<bytes>需要存储的内容,输入完成后,最后客户端需要加上“\r\n”(直接点击Enter)作为“命令头”的结束标志
九、PHP连接Memcached
先安装php的memcache扩展
# tar zxvf memcache-2.2.3.tgz
# cd memcache-2.2.3
phpize属于php-devel包,源码包安装的选择源码包安装的位置,一般情况位于:
/usr/local/php/bin/phpize
# /usr/bin/phpize
生成configure文件
# ./configure --with-php-config=/usr/local/php/bin/php-config --enable-memcache
# make && make install
# vim /etc/php.ini
extension = memcache.so
extension_dir = "/usr/lib64/php/modules/"
添加完成后用php -m查看一下是否有memcache模块
下载个php测试一小下
# curl www.apelearn.com/study_v2/.memcache.txt > 1.php 2>/dev/null
# php 1.php如果出现下面信息说明配置正确:
Get key1 value: This is first value<br>Get key1 value: This is replace value<br>Get key2 value: Array
(
[0] => aaa
[1] => bbb
[2] => ccc
[3] => ddd
)
十、Memcached实现session共享
在lamp/lnmp环境下实现的通用配置
编辑php.ini添加下面两行
session.save_handler = "memcache"
session.save_path = "tcp://127.0.0.1:11211"
或者编辑httpd.conf中对应的虚拟主机添加:
php_value session.save_handler "memcache"
php_value session.save_path "tcp://127.0.0.1:11211"
或者php-fpm.conf对应的pool中添加
php_value[session.save_handler] = memcache
php_value[session.save_path] = "tcp://127.0.0.1:11211"
IP地址是Memcached server的ip地址
在nginx发布的目录下创建session.php,加入如下内容:
<?php
session_start();
if (!isset($_SESSION['TEST'])) {
$_SESSION['TEST'] = time();
}
$_SESSION['TEST3'] = time();
print $_SESSION['TEST'];
print "<br><br>";
print $_SESSION['TEST3'];
print "<br><br>";
print session_id();
?>
# curl -x127.0.0.1:80 localhost/session.php
# telnet 127.0.0.1 11211
get lundelrir281bbgi4p4d261tq5
就可以看到Memcached中已经保存了session的信息了
通过# curl -x127.0.0.1:80 localhost/phpinfo.php | grep session.save_path可以查看到memcache的配置信息
也可以通过phpinfo.php在页面中的session项中看到memcache的配置信息
Memcached安装及配置的更多相关文章
- Windows和Linux环境下Memcached安装与配置(转)
一.memcached安装配置 windows平台安装 1.memcached-1.2.6-win32-bin.zip下载地址: http://code.jellycan.com/memcached/ ...
- Linux CentOS 7下Memcached 安装与配置
前言 本篇文章记录一下Linux CentOS 7中关于Memcached的安装与配置. 安装 安装memcached之前首先需要安装libevent,我这里用的版本是: •libevent-2.0. ...
- ubuntu memcached安装与配置
转载请注明来源:https://www.cnblogs.com/hookjc/ 关于Memcache与memcachedMemcache是项目名,memcached是服务名.让很多初接触的人感觉很是莫 ...
- Windows下Memcached安装与配置实例
环境声明: 服务器: Windows Server 2008r2: Memcached: Memcached 64-bit for Windows(64位) From: http://www.urie ...
- Memcached 安装及配置
下载Memcached.exe 保存到c:\memcached 运行command: 输入 c:\memcached\memcached.exe -d install 回车,安装memcached s ...
- Memcached安装与配置
memcached是danga.com的一个项目.它是一款开源的高性能的分布式内存对象缓存系统.最早是给LiveJournal提供服务的.后来逐渐被越来越多的大型站点所採用.用于在应用中减少对数据库 ...
- windows php下memcache+memcached安装与配置
环境声明: 服务器:Windows7 64-bit:Memcached:Memcached 64-bit for Windows(64位) 安装过程 解压刚刚下载的压缩包,得到两个文件:memcach ...
- Memcached安装配置及访问
1.Memcached键值对访问,对于网页来说,key需要使用uri. 2.Memcached的相关配置 memcached:缓存服务器,但本身无法决定缓存任何数据 一半依赖于客户端,一半依赖于服务端 ...
- linux下安装及配置和启动memcached
一.下载文件: 下载memcached和libevent,放到/hom/zwl/目录下 # wget http://www.danga.com/memcached/dist/memcached-1.2 ...
随机推荐
- 到目前为止,Linux下最完整的Samba服务器配置攻略 (转)
http://blog.chinaunix.net/uid-23069658-id-3142052.html 安装平台为UBUNTU 14.04,直接软件中心安装samba, service smb ...
- 本节向大家介绍一下UML建模误区
本节向大家介绍一下UML建模误区,这里向大家介绍九个误区,希望通过本节的学习,你对UML建模有清晰的认识,以免在以后使用过程中产生不必要的麻烦.下面让我们一起来看一下这些建模误区吧. UML建模误区 ...
- [流媒体]live555简介(转)
live555简介 Live555 是一个为流媒体提供解决方案的跨平台的C++开源项目,它实现了对标准流媒体传输协议如RTP/RTCP.RTSP.SIP等的支持.Live555实现 了对多种音视频编码 ...
- 访问FLASH设备-W25X16
/************************************* *文件名称:w25x16_spi.c * *功能描述:访问和写入数据到闪存w25x16 * *建立日期:2016-03-1 ...
- PHPSESSID的cookie
如果PHP脚本中有: 1 session_start(); 则说明使用了SESSION. SESSION是一种机制,可以在服务器端跨文件暂时保存数据或传递数据,常用于购物车等方面. SESSION只在 ...
- XAMPP启动mysql遇到的问题
Version: '10.1.9-MariaDB' socket: '' port: 3306 mariadb.org binary distribution2016-07-18 10:42:04 1 ...
- 重拾java系列一java基础(1)
前言,不知不觉,从接触java到工作至今已有两年的时间,突然感觉自己的基础知识还很薄弱,有些知识虽然知道,但是停留在表面上,没有深挖,或者实践过,感觉掌握的很肤浅,而且时间一长,就觉得忘记了,我觉得这 ...
- BZOJ 4562 食物链
我们需要拓扑一下. #include<iostream> #include<cstring> #include<cstdio> #include<algori ...
- Python 练习册--生成唯一激活码(邀请码)
题目是这样子的: 做为 Apple Store App 独立开发者,你要搞限时促销,为你的应用生成激活码(或者优惠券),使用 Python 如何生成 200 个激活码(或者优惠券)? 分析 其实要生成 ...
- Java_oop_继承
不用多久,就会升职加薪,当上总经理,出任CEO,迎娶白富美,走上人生巅峰.想想还有点小激动呢, OK,睡醒了,我们说到继承就先来学习一下Java中继承的语法. public SubClass exte ...