xsphp_memcache

一、Memcache概述

       Memcache(内存,缓存) : 是一个高性能的分布式的内存对象缓存系统。通过在内存里维护一个巨大的hash表。       (key=value)

 

                            Hash表

key

value

mystr

“abc”

myarr

Array(“aa”, “cc”);

object

Object值

 

       就是一个软件(服务软件) c/s软件 

       Mysql              129.12.121.11   3306

       Apache             www.baidu.com  80

      维护内存,是将数据在内存中使用, 减少I/O  150k 开源

       129.121.11.111   11211

二、Memcache工作原理

       Memcache软件, memcached

       http   httpd

       vsftp   vsftpd

       c/s软件 

       memcached是以守护程序方式运行于一个或多个服务器中,随时会接收客户端的连接和操作。

       客户端使用各种语言去编写PHP/java/c/c++/perl/python/ruby等

       libevent

三、为什么要在WEB中使用Memcache

具体操作步骤是:memcached服务器安装并启动成功以后,php程序直接去memcached服务器中查询数据,
如果获取数据失败,说明还没有建立缓存。php再去查询MySQL数据库,将数据显示给用户的同时,再讲数据保存
在memcached服务器中一份,并指定一个缓存时间,假设为1小时。这样,下次再执行同样的操作,在一个小时之内都可以从memcached中获取到缓存的数据,而不用每次都重新连接数据库去获取数据,这样就分担了MySQL数据库的查询压力。


四、安装Memcache服务器(Linux和Window上分别安装)

Linux下

安装libevent时

./configure–with-libevent=/usr
Make&& make install
安装memcached
./configure–with-libevent=/usr
Make&& make install
启动Memcahced –d –m 128 –l 192.168.1.111 –p 11211 –u root
停止: kill `cat /tmp/memcached.pid`;
Killall  memcached

window下

D:\memcache>memcached.exe -d install

D:\memcache>memcached.exe -d start

D:\memcache>memcached.exe -h

同样的命令只需要将install 换成uninstall即可卸载memcache

如果需要停止memcached服务器的运行,只需要将参数改为-d stop即可。

五、Memcached服务器的管理(启动)

              memcached的基本设置:

memcached –d –m 2048 –l localhost –p 11211
-p 监听的端口
-l 连接的IP地址, 默认是本机
-d start 启动memcached服务
-d restart 重起memcached服务
-d stop|shutdown 关闭正在运行的memcached服务
-d install 安装memcached服务
-d uninstall 卸载memcached服务

-l  设置监听的服务器IP地址,如果是本机通常不设置

-p  设置监听端口,通常不设置
-u 以的身份运行 (仅在以root运行的时候有效)
-m 最大内存使用,单位MB。默认64MB ,最大好像2G
-M 内存耗尽时返回错误,而不是删除项
-c 最大同时连接数,默认是1024
-f 块大小增长因子,默认是1.25
-n 最小分配空间,key+value+flags默认是48
-h 显示帮助

六、操作Memcached(命令行方式telnet作为客户端)

telnet localhost 11211

基本的memcached客户端命令:

5个常用的命令:
    
    stats:当前所有memcached服务器运行的状态信息。
    add:添加一个数据到服务器

    set:替换一个已经存在的数据,如果数据不存在,咋和add命令相同

    get:从服务器端提取指定的数据。

    delete:删除指定的单个数据,如果要清除所有数据,可以使用flush_all指令。

数据管理指令

指令格式: 命令 键 标记 有效期 数据长度

set userid 1 0 5    --设置userid 标记为1  0为长期 5个字符长度
aaaaa
STORED
get userid
VALUE userid 1 5
aaaaa
END

查看所有键名

stats items   --先查看标记号
STAT items:1:number 1
STAT items:1:age 67
STAT items:1:evicted 0
STAT items:1:outofmemory 0
END

stats cachedump 1 0  --查看所有键值
ITEM userid [5 b; 1523424750 s]
END

八、在PHP程序中使用Memcached

1,将php_memcache.dll保存到php应用程序扩展ext目录中

2,在php.ini文件添加扩展位置,extension=php_memcache.dll

3,重启apache服务器

<?php

	/*
		连接memcache服务器,添加键值,得到键值,删除键值
	*/

	$mem = new Memcache();
	$mem->connect('localhost','11211');
	//使用MEMCACHE_COMPRESSED标记对数据进行压缩(使用zlib)。 
	//向memcache服务器添加字符串
	$mem->add('a1','hello world',MEMCACHE_COMPRESSED);
	//向memcache服务器添加数组
	$mem->add('a2',array('a','b','c'),MEMCACHE_COMPRESSED);
	//set方法,如果有a3值则替换,没有建立
	$mem->set('a3',1000,MEMCACHE_COMPRESSED);
	//得到键值
	echo $mem->get('a1');

	print_r($mem->get('a2'));

	echo $mem->get('a3');
	
	//删除a1
	$mem->delete('a1');
	//清除所有键值
	$mem->flush();
	$mem->close();
get a3
VALUE a3 0 4
1000
END
get a1
VALUE a1 0 11
hello world
END
get a2
VALUE a2 1 42
a:3:{i:0;s:1:"a";i:1;s:1:"b";i:2;s:1:"c";}
END
<?php

	/*
		该函数用于执行结果集,并存入memcached服务器
		返回结果集数组
		$sql sql语句
		$mem  Memcache对象
	*/
	function selectTable($sql,$mem) {
		//md5 sql命令 作为memcached的唯一标识
		$key = md5($sql);
		//判断memcached服务器里有没有$key,如果有则返回,没有则从数据库里读取并创建。
		$data = $mem->get($key);
		if(!$data) {
echo 'memcached服务器里无此key值,从mysql数据读取并创建key';
			try {
				echo $sql.'<br/>';
				$dsn = 'mysql:dbname=xsphp;host=localhost';
				$user = 'root';
				$pwd = 'root';
				$opt = array(PDO::ATTR_PERSISTENT=>true,PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION ,PDO::MYSQL_ATTR_INIT_COMMAND=>'set names gbk');
				$pdo = new PDO($dsn,$user,$pwd,$opt);
			}catch(PDOException $e) {
				echo '数据库连接出错,'.$e->getMessage();
				exit;
			}

			try {
				$stmt = $pdo->prepare($sql);
				$stmt->execute();
				$data = $stmt->fetchAll(PDO::FETCH_ASSOC);
				//存入memcached服务器
				$mem->set($key,$data,MEMCACHE_COMPRESSED);
			}catch(PDOException $e) {
				echo $e->getMessage();
			}
		}


		return $data;
	}

	//创建memcached对象,连接
	$mem = new Memcache();
	$mem->connect('localhost','11211');
	$result = selectTable('select * from books',$mem);
	//输出结果集
	foreach($result as $row) {
		foreach($row as $data) {
			echo $data.' ';
		}
		echo '<br/>';
	}
	$mem->close();
1 1 php 电子工业出版社 高某某 100 与php相关的书 
2 1 mysql 邮电出版社 络某某 10 与mysql相关的书 
3 1 linux 电子工业出版社 逢某某 60 与linux相关的书 

具体可以参考PHP手册 “LXXXIV. Memcache Functions” 这章。
  Memcache面向对象的常用接口包括:
  Memcache::connect -- 打开一个到Memcache的连接
  Memcache::pconnect -- 打开一个到Memcache的长连接
  Memcache::close -- 关闭一个Memcache的连接
  Memcache::set -- 保存数据到Memcache服务器上
  Memcache::get -- 提取一个保存在Memcache服务器上的数据
  Memcache::replace -- 替换一个已经存在Memcache服务器上的项目(功能类似Memcache::set)
  Memcache::delete -- 从Memcache服务器上删除一个保存的项目
  Memcache::flush -- 刷新所有Memcache服务器上保存的项目(类似于删除所有的保存的项目)
  Memcache::getStats -- 获取当前Memcache服务器运行的状态
  Memcache::addServer-- 分布式服务器添加一个服务器


在PHP什么地方使用memcache

   一、 数据库读出来的数据(select)使用memcache处理

  二、 在会话控制session中使用


九、Memcache的安全(不让别人访问)

  1.内网

  2.设置放火墙

               Iptables –A INPUT –p tcp –s 192.168.1.111 –dport11211 –j ACCEPT

               Iptables –A INPUT –p udp –s 192.168.1.111 –dpost11211 –j ACCEPT



stats
STAT pid 5584
STAT uptime 24938
STAT time 1523449688
STAT version 1.2.6
STAT pointer_size 32
STAT curr_items 4
STAT total_items 17
STAT bytes 522
STAT curr_connections 2
STAT total_connections 44
STAT connection_structures 4
STAT cmd_get 50
STAT cmd_set 23
STAT get_hits 41
STAT get_misses 9
STAT evictions 0
STAT bytes_read 3746
STAT bytes_written 9039
STAT limit_maxbytes 67108864
STAT threads 1
END

pid

memcache服务器的进程ID

uptime

服务器已经运行的秒数

time

服务器当前的unix时间戳

version

memcache版本

pointer_size

当前操作系统的指针大小(32位系统一般是32bit)

rusage_user

进程的累计用户时间

rusage_system

进程的累计系统时间

curr_items

服务器当前存储的items数量

total_items

从服务器启动以后存储的items总数量

bytes

当前服务器存储items占用的字节数

curr_connections

当前打开着的连接数

total_connections

从服务器启动以后曾经打开过的连接数

connection_structures

服务器分配的连接构造数

cmd_get

get命令(获取)总请求次数

cmd_set

set命令(保存)总请求次数

get_hits

总命中次数

get_misses

总未命中次数

evictions

为获取空闲内存而删除的items数(分配给memcache的空间用满后需要删除旧的items来得到空间分配给新的items)

bytes_read

总读取字节数(请求字节数)

bytes_written

总发送字节数(结果字节数)

limit_maxbytes

分配给memcache的内存大小(字节)

threads

当前线程数



memcached服务器命令:

Command

Description

Example

get

Reads a value

get mykey

set

Set a key unconditionally

set mykey 0 60 5

add

Add a new key

add newkey 0 60 5

replace

Overwrite existing key

replace key 0 60 5

append

Append data to existing key

append key 0 60 15

prepend

Prepend data to existing key

prepend key 0 60 15

incr

Increments numerical key value by given number

incr mykey 2

decr

Decrements numerical key value by given number

decr mykey 5

delete

Deletes an existing key

delete mykey

flush_all

Invalidate specific items immediately

flush_all

Invalidate all items in n seconds

flush_all 900

stats

Prints general statistics

Stats

Prints memory statistics

stats slabs

Prints memory statistics

stats malloc

Print higher level allocation statistics

stats items

 

stats detail

 

stats sizes

Resets statistics

stats reset

version

Prints server version.

version

verbosity

Increases log level

verbosity

quit

Terminate telnet session

quit




  


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值