最新消息:阿啰哈,本人90后,目前单身,欢迎妹子们来撩!.(。→‿←。) 微信:frank01991

memcached操作使用

安装:
windows:进入cmd ,切换到 memcached.exe 文件所在目录,然后使用命令 memcached.exe -d install
启动:memcached -m 200M -d start (默认不加-m为64M)
查看:netstat -an 查看端口监听状况   netstat -anb 看那些程序在监听端口 那些用户连接了服务器
Linux::安装libevent-》安装memcached

安装:

        安装memcached之前要先安装Libevent。现在假定Libevent安装在/usr/local/libevent目录了。

        因为memcached安装后不像Libevent那样,有一堆头文件和库文件。安装后的memcached不是用来编程而直接用来运行的。所以不需要在/usr/local目录下专门为memcached建立一个目录。直接把memcached安装到/usr/local即可。

        在Linux中解压memcached-1.4.21.tar.gz,然后进入解压后的目录。输入命令下面命令进行配置安装。

        $./configure --with-libevent=/usr/local/libevent

        $make

        $sudo make install

        memcached的默认安装目录就是/usr/local,如果想安装在自己的目录,那么可以configure的时候用--prefix=xxx指定一个目录。--with-libevent就是用来指明Libevent的安装目录的。

        如果安装目录是/usr/local那么现在可以memcached这个可执行程序了,直接在命令行输入memcached即可,并且此时可以使用命令$man memcached查询帮助手册。

        假如是安装在其他目录,比如/usr/local/memcached目录,那么还需要一些配置。首先要配置可执行文件的查找目录,需要修改PATH环境变量。在/etc/bash.bashrc文件最后添加:

        exportPATH=$PATH:/usr/local/memcached/bin

        此时,就可以在shell中能运行memcached命令了。但还不能使用man来查询memcached的帮助手册。因为该命令的帮助手册没有在man的查询目录上。在/usr/local/memcached/share/man/man1目录中,有一个memcached.1文件。把这个文件拷贝到/usr/local/share/man/man1目录下。此时就可以man 这个memcached了。

调试:

        如果已经安装了memcached,那么先使用$sudo make uninstall命令进行卸载。configure 配置和前面一样,不需要改变。然后输入下面命令生成debug版本的memcached。

        $make  CFLAGS="-g -O0"

        $sudo make install

        这样就行了。然后直接是shell里面输入$gdb memcached命令启动memcached。至于memcached的参数是在启动gdb之后,使用run命令的时候才输入的。如下图所示:

        

        要记得先设置断点,然后才使用r或者run命令。

启动命令:

        简单的启动命令如下,设置-l和-p分别用来设置ip和监听的端口。-vv是输出一些运行信息。

        $memcached  -l 192.168.1.112  -p 8888  -vv

和libevent的关系:

        memcached依赖于libevent。从memcached的编译就可以知道。阅读memcached的代码需要懂得libevent的基本使用,关于libevent的使用例子可以参考《Libevent使用例子,从简单到复杂》。当然阅读memcached源码并不需要阅读libevent源码作为基础,懂得libevent的基本使用即可。假如读者想阅读libevent的源代码,可以参考《libevent源码分析》系列文章。

和libevent源码阅读的难度比较:

        虽然memcached的代码量比libevent少很多,但阅读起来却比libevent难很多。主要原因有:memcached使用了大量的全局变量;各个模块之间的关联性很强;使用了大量的锁和很多线程。而libevent的各个模块独立得比较好,模块间关联很少,基本上是各个模块完成自己独立的功能,然后向外界提供使用接口。所以阅读memcached的代码更要耐心。另外,阅读memcached源码除了需要会用libevent外还需要懂得多线程、socket、管道等等东西的基本使用。当然如果看过《UNIX环境高级编程》那么就没有问题了。

启动:Memcahced –d –m 128 –l 192.168.1.111 –p 11211 –u root [表示128m, 监听192.168.1.111 端口11211]

memcached的基本设置:
-p 监听的端口
-l 连接的IP地址, 默认是本机
-d start 启动memcached服务
-d restart 重起memcached服务
-d stop|shutdown 关闭正在运行的memcached服务
-d install 安装memcached服务
-d uninstall 卸载memcached服务
-u 以的身份运行 (仅在以root运行的时候有效)
-m 最大内存使用,单位MB。默认64MB
-M 内存耗尽时返回错误,而不是删除项
-c 最大同时连接数,默认是1024
-f 块大小增长因子,默认是1.25
-n 最小分配空间,key+value+flags默认是48
-h 显示帮助

mixi的设置,单台:
每台memcached服务器仅启动一个memcached进程。分配给memcached的内存为3GB,启动参数如下:

/usr/bin/memcached -p 11211 -u nobody -m 3072 -c 30720
由于使用了x86_64的操作系统,因此能分配2GB以上的内存。32位操作系统中,每个进程最多只能使用2GB内存。也曾经考虑过启动多个分配2GB以下内存的进程,但这样一台服务器上的TCP连接数就会成倍增加,管理上也变得复杂,所以mixi就统一使用了64位操作系统。

另外,虽然服务器的内存为4GB,却仅分配了3GB,是因为内存分配量超过这个值,就有可能导致内存交换(swap)。连载的第2次中前坂讲解过了memcached的内存存储“slab allocator”,当时说过,memcached启动时指定的内存分配量是memcached用于保存数据的量,没有包括“slab allocator”本身占用的内存、以及为了保存数据而设置的管理空间。因此,memcached进程的实际内存分配量要比指定的容量要大,这一点应当注意。

mixi保存在memcached中的数据大部分都比较小。这样,进程的大小要比指定的容量大很多。因此,我们反复改变内存分配量进行验证,确认了3GB的大小不会引发swap,这就是现在应用的数值。

memcached -d -m 1024 -u root -l 172.25.38.70 -p 12000 -c 4096 -P /tmp/memcached.pid 12000
-p 12000 端口
-m 1024  内存设置1GB
-c 4096  同时连接数

停止: kill `cat /tmp/memcached.pid`;  Killall  memcached

操作memcached服务:

1、php程序(memcache扩展操作,memcached扩展操作,直接使用socket编程来操作)

2、telent工具

telnet操作

telent 127.0.0.1 11211 连接

add key 0 存放时间(数据大小(字符) (注 0表示不压缩 MEMCACHE_COMPRESSED表示压缩lzip压缩,存放时间为0 永不过期,直接给过期时间为秒数最大为30*3600*24,若想保存超过30天的具体时间则可设为 time()+天数*3600*24

get/add/set/replace/append/prepend
..  key 0 60 5
delete
delete key
incr/decr
incr/decr key number
flush_all
flush_all / flush_all 900 900秒后数据清空
stats
状态
version/quit

php程序操作memcached增删改查

1、加载memcache.dll扩展(优先使用扩展,扩展已经编译过(二进制)速度比源码快
 php_memcache.dll 文件拷贝 phpext 下(不同php版本扩展不一样)
加载php_memcache.dll 文件(去掉extension=php_memcache.dll前面的分号
重启apache,代码操作
代码:
//创建一个mem对象实例  
$mem=new Memcache;  
//连接数据库      
if(!$mem->connect("127.0.0.1",11211)){  
die('连接失败!');  
}  
//存入字符串(除了资源不能存其他都能存,资源会存入0)  
$mem->set('key1', 'guugle', MEMCACHE_COMPRESSED, 0);  
2、如果不能加载memcache.dll扩展(可使PHP源码来操作memcached服务
//引入源码  
require_once 'memcached-client.php';  
$mc = new memcached(array(  
'servers' => array('127.0.0.1:11211'), //连接的memcacheip和端口  
'debug'   => false, //是否debug  
'compress_threshold' => 10240, /*最大压缩*/  
'persistant' => true)); /*是否是持久连接*/  
3、分布式架设
$mem = new Memcache;  
$mem->addServer('127.0.0.1',11211);  
$mem->addServer('127.0.0.1',9999);
特点:数据不是同步的,是分布的
      把什么样的数据存放到哪一个memcached服务是由客户端的mem对象决定的
      当执行addServer的时候,并不是立即去连接mem服务,而是通过计算hash后才去决定连接哪个mem服务,因此当大量加入服务器到连接池,没有多余开销
memcache细节
生命周期:从数据存入到mem开始计时,直到时间到了,就销毁
什么时候销毁:1、时间到 2、重启memcached服务 3、重启操作系统 4、delete/flush_all销毁
把SESSION存入到memcached
1、修改php.ini配置文件
session.save_handler = memcache
session.save_path = "tcp://127.0.0.1:11211"
key为session_id();
问题点:如果虚拟主机不让我们修改 php.ini 文件,怎么配置?
ini_set("session.save_handler","memcache");
ini_set("session.save_path","tcp://127.0.0.1:11211");
通过ini_set去动态修改对php.ini配置,只对本页面有效,不会影响其他页面。
memcached 与 session 比较
memcached主要目的是提速,是一种无状态的数据,即数据和用户不绑定
session数据是和用户绑定的,因此他是一种有状态的数据
如何使用memcached才是安全的?
windows:内网+防火墙
Linux:setup配置防火墙   iptables -a input -p tcp -s 127.0.0.1 -dport 11211 -j ACCEPT
什么样的数据适合放memcached中?
1、变化频繁、具有不稳定性的数据,不需要实时入库(在线状态、在线人数...)
2、门户网站的新闻、静态化依然不能满足的可存放到memcached中
与redis比较
redis会定时向磁盘中传输

问题:

在另外文件中取出对象时,有个注意的地方,对应php5.2这个版本会提示错误,php5.3这个版本会提示 incomplete 信息解决方法是在要取对象的页面再声明类定义即可

注:

端口号: 0~65535(两个字节表示);有名端口:0-1024  常用占用端口:apache 80  ssh 22   ftp 21 stmp 25  mysql 3306  oracle 1521

序列化/反序列化: 数组或对象 -> serialize  转化成字符串(保证数据信息及其类型和结构不丢失)同时可存储到任何地方。 ->unserialize 转换城数组/对象。

为什么需要序列化:1、对象保存到磁盘中,必须要序列化,不然保存不了。2、数组在网络上传输必须序列化成字符串

什么时候使用serialize 什么时候使用json_encode 

ajax配合时优先使用json_encode

via: http://blog.csdn.net/guugle2010/article/details/40194153
https://code.google.com/p/memcached/wiki/NewConfiguringServer
http://docs.linuxtone.org/ebooks/NOSQL/memcached/
官方下载:http://memcached.org/files/

转载请注明:林志斌 » memcached操作使用

发表评论
取消评论
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址