码迷,mamicode.com
首页 > 系统相关 > 详细

memcache

时间:2015-08-10 02:08:02      阅读:228      评论:0      收藏:0      [点我收藏+]

标签:memcache

Memcached

Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态、数据库驱动网站的速度。Memcached基于一个存储键/值对的hashmap。其守护进程(daemon )是用C写的,但是客户端可以用任何语言来编写,并通过memcached协议与守护进程通信。


memcache 是一个 C/S 结构server 端:memcachedclient 端:memcache

 

 

运行模式: C/S

端口号:11211

[root@silence80 ~]# vim /etc/services

技术分享

作用:

memcached 可以缓存 mysql 的查询结果,优化 mysql  I/O。

 

 运行机制: 普通情况:

user ->web->mysql

技术分享

使用 memcache 情况:

user->web  ->memcache->mysql

技术分享

1) memcache 的优先级大于 mysql,查找数据流程:

web 向数据库取数据的时候 优先去找 memcache


如果找到  y 拿数据

如果没找到N web 去找 mysql

 Y 去写入 memcache 一份 web 继续处理请求


2) 数据放到 memcache 会优化 mysql  I/O,因为内存比硬盘快

memcached 缓存数据的方式: 1、 将数据全部缓存在内存  ,  2、缓存到硬盘中。[如果要缓存的 数据量不是非常大  不建义]

注: 缓存断电后 所有缓存数据全部丢失


3)memcached 存储缓存数据的方式:

将 mysql 的查询结果  以 key = value 的形式写入内存

每条数据都有自己的有效期, 在有效期内  我们称之为热点数据 过期数据叨脏数据



4) memcache 内存缓存大小

32bit 操作系统 2G

64bit 操作系统 没限制



5) 数据缓存周期

数据缓存周期, 可以自定义 , 即使调设为永丽不过期的数据, 默认也会在 30 天后过期



一、安装 lamp 源码编译 LNMP 环境

略过


二、安装 memcached

上传软件包: libevent-2.0.22-stable.tar.gz  memcached-1.4.22.tar.gz

安装 libevent

[root@silence80 ~]# tar zxvf libevent-2.0.22-stable.tar.gz

[root@silence80 ~]# cd libevent-2.0.22-stable

[root@silence80 libevent-2.0.22-stable]# ./configure   --prefix=/usr/local/libevent   #检查 系统编译环境

[root@silence80 libevent-2.0.22-stable]# make   -j   4 # 将源码编译成二进制,   -j   4 使用

4 个进程同时编译

[root@silence80 libevent-2.0.22-stable]# make install   #安装 查看安装后的文件:

[root@silence80 libevent-2.0.22-stable]# ls /usr/local/libevent/

bin   include   lib



安装服务器端:memcached

[root@silence80 ~]# tar zxvf memcached-1.4.22.tar.gz

[root@silence80 ~]# cd memcached-1.4.22

[root@silence80 memcached-1.4.22]# ./configure   --prefix=/usr/local/memcached --with-libevent=/usr/local/libevent/

[root@silence80 memcached-1.4.22]# make -j 4 

[root@silence80 memcached-1.4.22]# make install 

[root@silence80 memcached-1.4.22]# echo $?

0

启动 memcached

[root@silence80 memcached-1.4.22]# /usr/local/memcached/bin/memcached -u root -p

11211 -l 192.168.1.63 -P /var/run/memcached.pid -m 128m -c 2048 -d

[root@silence80 memcached-1.4.22]# echo $?

0

参数:

-u  user

-p port

-l listen



-P pid

-m 内存缓存大小

-c 最大并发

-d  作为守护进程在后台运行



查看端口:

[root@silence80 ~]# netstat -antup | grep 11211

tcp 0 0 192.168.1.63:11211 0.0.0.0:* LISTEN

9801/memcached

udp 0 0 192.168.1.63:11211 0.0.0.0:*

9801/memcached




测试,连接 memecached 读写数据



#使用 telnet 连接 memcache,进行测试

诧法:telnet IP 11211

[root@silence80 ~]# rpm -ivh /mnt/Packages/telnet-0.17-47.el6.x86_64.rpm

warning: /mnt/Packages/telnet-0.17-47.el6.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID fd431d51: NOKEY

Preparing... ########################################### [100%]

1:telnet ########################################### [100%]



实例:使用 telnet 连接 memcache,进行测试

telnet 写入 memcache 命令栺式

<command name> <key> <flags> <exptime> <bytes>回车换行 <data block>回车换行 参数详解:

1.<command name> 可以是”set”

set:<key>不存在时添加,<key>存在时覆盖。

2.<key> 保存数据的 key

3.<flags> 是一个 16 位的无符号的整数(以十进制的方式表示)。 该标志将和需要存储的数据一起存储,并在客户端 get 数据时返回。 客户可以将此标志用做特殊用途,此标志对服务器来说是透明的。

4.<exptime> 过期的时间。

0 表示存储的数据永进不过时。

非 0(unix 时间),当过期后,服务器可以保证用户得不到该数据(以服务器时间为标准)。

5.<bytes> 需要存储的字节数(不包含最后的”\r\n(回车换行)”),当用户希望存储空数据时,可以为 0

6.最后客户端需要加上”\r\n”作为”命令头”的结束标志。

7.<data block>\r\n 紧接着”命令头”结束之后就要发送数据块(即希望存储的数据内容),最后加上”\r\n”作为此次通讯的结 束。



当以上数据发送结束之后,服务器将返回一个应答。可能有如下的情况:

1.STORED\r\n:表示存储成功


2.NOT_STORED\r\n: 表示存储失败,但是该失败不是由于错诨。



实例:使用 memcache 存储数据

[root@silence80 ~]# telnet 192.168.1.63 11211

Trying 192.168.1.63... Connected to 192.168.1.63. Escape character is ‘^]‘.

set name 4 300 7

 jacker

  STORED

get name

VALUE name 4 7 silence

END

quit

Connection closed by foreign host.

参数说明:

set name 4 300 7

#往 memcached 缓存中存储一个键值,标志 4 ,缓存时间 300 秒,字符串长度是 6 个字节

silence   #输入内容

STORED   # 该标志代表是存入成功

get name #get 命令读取缓存数据 VALUE name 4 6

silence

END 该标志代表结束

quit   #退出




#思考 memcache 的 -m 设置内存缓存大小为多少合适?

如果本服务器只运行 memcache, -m 应为物理内存的 80%-70% 根据数据量来设定



三、安装客户端 memcache,即生成 memcache 模块

phpize 概述:

phpize 是用来扩展 php 扩展模块的,通过 phpize 可以建立 php 的扩展模块 默认情况,源码编译的 php 中自带这个命令文件:



查看:

[root@silence80 memcache-2.2.7]#ls   /server/php-5.4-nginx/bin/phpize



生成 memcache 客户端模块

[root@silence80 ~]# tar -zxvf memcache-2.2.7.tgz 

[root@silence80 ~]# cd /root/memcache-2.2.7 

[root@silence80 memcache-2.2.7]# ls

config9.m4 memcache.c memcache_queue.h config.m4 memcache_consistent_hash.c  memcache_session.c

config.w32   memcache.dsp memcache_standard_hash.c CREDITS memcache.php php_memcache.h

example.php   memcache_queue.c README



[root@silence80 memcache-2.2.7]# /server/php-5.4-nginx/bin/phpize

Configuring for:

PHP Api Version: 20100412

Zend Module Api No: 20100525

Zend Extension Api No: 220100525 

[root@silence80 memcache-2.2.7]# ls

acinclude.m4  configure.in memcache.php aclocal.m4 config.w32 memcache_queue.c autom4te.cache   CREDITS memcache_queue.h build example.php memcache_session.c

config9.m4 install-sh memcache_standard_hash.c config.guess ltmain.sh missing

config.h.in Makefile.global mkinstalldirs config.m4  memcache.c php_memcache.h config.sub memcache_consistent_hash.c  README configure  memcache.dsp run-tests.php 

注:发现多了很多文件

编译安装:

# ./configure --enable-memcache --with-php-config=/server/php-5.4-nginx/bin/php-config

[root@silence80 memcache-2.2.7]# make -j 4

See any operating system documentation about shared libraries for more information, such as the ld(1) and ld.so(8) manual pages.

----------------------------------------------------------------------



Build complete.

Don‘t forget to run ‘make test‘.



[root@silence80 memcache-2.2.7]# make install

Installing shared extensions:

/server/php-5.4-nginx/lib/php/extensions/no-debug-non-zts-20100525/

查看编译出来的模块:

[root@silence80 memcache-2.2.7]# ll

/server/php-5.4-nginx/lib/php/extensions/no-debug-non-zts-20100525/memcache.so

-rwxr-xr-x 1 root root 259104 May 26 08:33

/server/php-5.4-nginx/lib/php/extensions/no-debug-non-zts-20100525/memcache.so



查看 php.ini 配置文件位置:

访问:http://192.168.1.63/a.php #通过调用 phpinfo()凼数来查看

[root@silence80 memcache-2.2.7]# cat /server/nginx-1.2.8/html/a.php

<?php

phpinfo();

?>

查看 memcache 相关内容,注:没有添加时,是看不到的

技术分享

[root@silence80 ~]# vim /server/php-5.4-nginx/php.ini

在:

728 ; extension_dir = "./"   #在 php.ini 中;表示注释 追加:

extension_dir = "/server/php-5.4-nginx/lib/php/extensions/no-debug-non-zts-20100525/"

extension=memcache.so

[root@silence80 ~]# ls

/server/php-5.4-nginx/lib/php/extensions/no-debug-non-zts-20100525/

memcache.so

#能看到 memcache.so



重新启动 php-fpm

[root@silence80 ~]# /etc/init.d/php-fpm restart 

Gracefully shutting down php-fpm . done 

Starting php-fpm   done




测试

1) 查看 phpinfo.php  是否有 memcache 选项

访问:http://192.168.1.63/a.php ,查看 memcache 相关内容,注:没有添加时,是看不到的


技术分享

2) memcache  memcached 的连接写一个 php 页面

[root@silence80~]# vim /server/nginx-1.2.8/html/mem.php  #写入以下内容

<?php

 

 

$memcache = memcache_connect(‘192.168.1.63‘, 11211);

 

 

$memcache->set( ‘test‘ , ‘hello world!‘ , 0 , 12 );

$val =   $memcache->get( ‘test‘ );

echo $val;

?>

 

 

注:0 表示 memcache 缓存过期时间,  12 表示 test 可以存储字节数

 

 

访问:http://192.168.1.63/mem.php ,可以看到 hello world!  说明成功

技术分享

实战 3:开始缓存 mysql 数据



[root@silence80 ~]# /etc/init.d/mysqld5.5 restart

Shutting down MySQL.. [   OK   ] 

Starting MySQL.... [   OK   ]



产生测试数据:

seq 命令: 用于产生从某个数到另外一个数之间的所有整数 

[root@silence80 ~]# seq 1 99999 > /tmp/big

[root@silence80 ~]# tail   /tmp/big

99990

99991

99992

99993

99994

99995

99996

99997

99998

99999



将生成的数据导入到 msyql 数据库:



[root@silence80 ~]# mysql -uroot -p123456   -e "create database db1"

[root@silence80 ~]# mysql -uroot -p123456 -e "use db1;create table T1(ID

int)ENGINE=innodb"

[root@silence80 ~]# mysql -uroot -p123456 -e "use db1;load data infile ‘/tmp/big‘ into table T1"

注:LOAD DATA INFILE 诧句以很高的速度从一个文本文件中读取行到一个表中,因此文件中行的内容 要和表的列相符。相关文件名必须是一个文字字符串。


上传脚本到/var/www/html下

技术分享

访问测试页面:

http://192.168.1.63/memcached_page/

如果显示不正常,调一下编码

技术分享

读测试

技术分享

技术分享

写测试

技术分享


写完之后到读测试那边去查询

技术分享


本文出自 “枯木知深秋” 博客,请务必保留此出处http://kmzsq.blog.51cto.com/10542759/1683168

memcache

标签:memcache

原文地址:http://kmzsq.blog.51cto.com/10542759/1683168

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!