通知短信+运营短信,5秒速达,支持群发助手一键发送🚀高效触达和通知客户 广告
##MemCache管理与应用 > MemCache系统是通过客户端发送的命令(set/get)管理“内存中缓存”的数据。客户端在于MemCached服务器建立连接以后,接下来的事情就是存取对象了,每个被存取的对象都有一个唯一的标识符key,存取操作均通过这个key进行,保存到memcached中的对象实际上是放置在内存中的,而并不是保存在缓存文件中的,这也是为什么MemCached能够如此告诉快速的原因。 ![memcached工作原理](https://img.kancloud.cn/b9/27/b927c38120224dcdf1610520d24bce5c_350x300.jpg) ###MemCache在WEB中的应用: 1、使用MemCache作为中间缓冲层减少数据库的压力 2、MemCache分布式的应用 ###MemCache的安装及管理 1、Linux下安装MemCache软件 省略... 2、Window下安装MemCache软件 下载MemCache二进制数据包; 解压后放在某个磁盘的分区下面:如D:\ 执行安装命令: D:\>memcached.exe -d install ![安装memcached](https://img.kancloud.cn/db/67/db673049e59214917795a411d6213bf1_667x292.png) 通过计算机管理的“服务”中查看刚安装的memcached软件。 ![计算机管理的服务](https://img.kancloud.cn/d2/a6/d2a664f104678ffad8ac40cff11c1cd8_737x309.png) 启动memcached服务器: D:\>memcached.exe -d start ![启动memcached服务器](https://img.kancloud.cn/b3/60/b360af93236523526a1f9908226a4a90_563x277.png) 停止memcached服务器的运行: D:\>memcached.exe -d stop 3、memcached服务器的管理 一些常用的管理选项: 例如:memcached.exe -d -m 2048 -l localhost -p 11211 -d 以守护程序方式运行memcached -m 2048 2GB内存 -l localhost 监听本机 端口 11211 ![memcached服务器的管理](https://img.kancloud.cn/f2/7b/f27b4f99a7781b70abc6e9fffa802946_533x182.png) ###使用Telnet作为memcached的客户端管理 1、连接memcached服务器 telnet localhost 11211 ![连接memcached服务器](https://img.kancloud.cn/c5/49/c54959a8226c4fe9462e53ae4cbf21fd_539x220.png) 2、基本的memcached客户端命令 stats:当前所有memcached服务器运行的状态信息 add:添加一个数据到服务器 set:替换一个已经存在的数据。如果数据不存在,则和add命令相同。 get:从服务器端提取指定的数据。 delete:删除指定的单个数据。清除所有的数据,可以使用flush_all指令。 3、数据管理指令 添加(add)、修改(set) <命令><键><标记><有效期><数据长度> 键:key 标记:一个16位的无符号整型数据,用来设置服务器端和客户端的一些交互操作 有效期:0表示无限制,单位是秒 ![数据管理指令](https://img.kancloud.cn/52/0f/520fc125bf0ba4a7e91095cc4b3c6a75_635x383.png) 删除(delete)和获取(get) <命令><键> ![删除数据管理指令](https://img.kancloud.cn/81/1d/811df870378bee86ff93016a349c2696_581x268.png) ###PHP的memcached管理接口 1、安装PHP中的MemCache应用程序扩展接口 安装文件后,在配置文件中加入“extension=php_memcache.dll” 2、PHP程序使用MemCache应用程序接口的方法实例 <?php //实例化得到memcache对象 $mem = new Memcache(); //连接memcached服务器 $mem->connect('127.0.0.1',11211); //赋值 $mem->set('name','jack',2,1000); //取值 echo $mem->get('name'); 结果输出:jack <?php //得到memcache对象 $mem = new Memcache(); //连接 $mem->connect('127.0.0.1', 11211); $list = array('name'=>'jack', 'age'=>18); //赋值 存进去是什么样子,读取出来就是什么样 $mem->set('list', $list); //取值 $res = $mem->get('list'); echo '<pre>'; print_r($res); echo '</pre>'; 输出结果如下: ![从memcached服务器中获取数据](https://img.kancloud.cn/1d/ab/1dab76abd28ae43022e89dde49f92c1c_419x258.png) ####分布式memcached服务器 //添加多台服务器 $mem->addServer('192.168.12.6',11211); $mem->addServer('192.168.12.251',11211); $mem->addServer('192.168.12.25',11211); ###MemCache的实例应用 1、从数据库读取用户表的PHP代码 <?php $mem = new Memcache(); $mem->connect('127.0.0.1', 11211); $sql = "select id, username, password, addtime from shop_user"; $fileName = md5($sql); echo $fileName; $userlist = $mem->get($fileName); if (empty($userlist)){ $link = mysqli_connect('127.0.0.1','root', '', 'ishop'); mysqli_set_charset($link,'utf8'); sleep(3); $res = mysqli_query($link, $sql); if ($res) { while ($row = mysqli_fetch_assoc($res)) { $userlist[] = $row; } } // bool Memcache::set ( string $key , mixed $var [, int $flag [, int $expire ]] ) // 向memcached中设置值,设置失效时间是10s $mem->set($fileName, $userlist, 2, 10); } /* key 要设置值的key。 var 要存储的值,字符串和数值直接存储,其他类型序列化后存储。 flag 使用 MEMCACHE_COMPRESSED 指定对值进行压缩(使用zlib)。 expire 当前写入缓存的数据的失效时间。 */ ?> 2、HTML的数据展示代码 <table width="600" border="1" align="center"> <caption><h2>用户列表</h2></caption> <tr> <th>ID</th> <th>UserName</th> <th>Password</th> <th>AddTime</th> </tr> <?php foreach($userlist as $v): ?> <tr> <td><?php echo $v['id']; ?></td> <td><?php echo $v['username']; ?></td> <td><?php echo $v['password']; ?></td> <td><?php echo $v['addtime']; ?></td> </tr> <?php endforeach; ?> </table> 代码解释: 1、第一次访问时,$userlist数据为空,因此会读取数据库操作,查询的结果会同时存储到memcached中,$mem->set($fileName, $userlist, 2, 10); 并且设置了失效的时间为10s。 2、$userlist只要没有失效,那么访问该页面,就会通过$userlist = $mem->get($fileName);来获取存储在memcached中的查询结果,而不直接访问数据库。这样读取的速度就会很快。 3、当缓存失效后,再读取数据库中的最新数据。 ![memcached实际案例](https://img.kancloud.cn/32/fc/32fc71db782cff6d3048435caf271b51_649x524.png)