PHP数据库操作二:memcache用法分析


Posted in PHP onAugust 16, 2017

本文实例讲述了PHP数据库操作之memcache用法。分享给大家供大家参考,具体如下:

在一个高并发的web应用中,数据库存取瓶颈一直是个大问题,一旦达到某个极限,数据库很容易崩溃,但是如果我们把常用的数据放到内存中,在需要的时候从内存中取,不光读取速度快,而且节约数据库IO。

memcache简介

Memcache是一个高性能的分布式的内存对象缓存系统,通过在内存里维护一个统一的巨大的hash表,它能够用来存储各种格式的数据,包括图像、视频、文件以及数据库检索的结果等。简单的说就是将数据调用到内存中,然后从内存中读取,从而大大提高读取速度。

memcache的mem是内存(memory),cache是缓存,结合是内存缓存的意思。我们应用memcache时,读取数据先从memcache内读取,若查找不到再去数据库里查找,并将数据存入memcache,待下次查找时便能轻易找到。

需要注意:

memcache是内存型的数据库 ,因为内存的关闭释放的特性,memcache也无法持久化存储内容;
memcache内部是分块存储,所以大于1M的数据也无法存储。
memcache依赖libevent库,安装前需确认已经安装了libevent库。
memcache是一个轻量级的内存型数据库,只支持key-value型的存储。
memcache中没有关于用户,密码的设置,所以在配置时要配置防火墙的端口限制连接,以达到安全的目的。
使用repcached也能轻易实现memcache的单master单slave主从复制。

memcache的应用场景

存储大量不需要持久存储或数据库内已存在不会变动的数据。
读取数据非常频繁数据,要求小于1M。
数据类型简单的key-value型数据。
计算好的结果和渲染后的网页模板文件。
因其原子递增性,可以用来计数。
因为可以设置数据过期时间的特性,存储期限数据。不过需要注意,memcache会在分配的内存不足时以最近最少使用原则(LRU)重用内存,可能会导致信息提前被删除。
用memcache存储session信息,以达到多服务器session共享。需要配置:php.ini:

session.save_handler = memcache //设置session的储存方式为memcache 
memcache.hash_strategy = "consistent"//设置memcache的hash算法为一致性哈希算法。 
session.save_path = "tcp:/ip:port" //设置session储存的位置,多台memcache用逗号隔开。

memcache服务器的安装

memcache的安装简单,服务器可以在其官网http://www.memcached.org/下载,解压后在其目录下运行./configure -prefix=/path编译,然后make / make test / make install 得到可以直接执行的二进制文件。

使用./memcached命令即可开启服务器,其常用参数如下:

-p port 监听端口 (默认: 11211)
-d 以后台方式运行Memcached
-u username 运行Memcached的账户
-m n 最大的内存使用, 单位是MB,默认 64 MB
-c connections 最大连接数量, 默认是 1024

memcache的常用命令

用memcache客户端或telnet连接到memcache后,就可以对memcache进行操作了。

memcache数据结构简单,所以命令行命令也很少,下面以一条常用命令来简析一下命令格式:

add key flags expire_time length \r\n value

flags:是否压缩/序列化,通常为0。

expire_time:从存储后多久过期。以秒(s)为单位,最大为30天的长度,超过30天的长度被视为时间戳表示"到什么时候过期",若设为0表示永不过期。

length:value长度,输入长度回车之后,命令行会读取你接下来输入的length个字符。

set key flags expire_time length  //如果有值则覆盖原值,没有则新增,add在有值时会存储失败
get key               //获取key的值
replace key flags expire_time length// 替换一个已存在的key
append/preappend key flags expire_time length// 给key的value后面/前面添加新内容。
preappend key flags expire_time length   // 给key的value前面添加新内容。
inc/dec key [n]             //key的值递增/递减1/[n]
delete key               //删除一个key
flush_all [n]              //[在n秒后]删除全部数据
stats [options]             //获取memcache[有关某一项]的详细信息

PHP的memcache扩展及应用

在https://pecl.php.net/index.php搜索获取到所需的memcache扩展包。

linux系统,直接挑选版本(推荐最新stable稳定版)下载,解压后在解压目录下用phpize工具产生configure文件,并用它安装,安装完成后在/php.ini中添加extension。具体可参考前文:https://3water.com/article/121314.htm。

windows下要点击链接右边的“windows logo DLL”链接,并在新打开的页面中,按照版本、32位/64位、线程安全/非线程安全来选择自己所需要的扩展,具体选项可以在phpinfo();页面看到。下载完成后,将其放入phppath/ext/目录下,然后在php.ini中添加extension=php_memcacache.dll;重启服务器完成安装。

在phpinfo()页面中看到memcache扩展后,说明安装成功,我们就可以在php脚本中使用关于memcache的类函数库了。

在手册中我们可以找到许多关于php的memcache扩展的使用,以下是一个典型的memcache使用流程。

$m=new Memcache();
$m->connect($host,$port);
$m->add($key,$value[,flags,$expire_time]);
$content=$m->get($key);
$m->close();

这是一个简单的memcache连接程序,在进行memcache分布式存储时,还需要用到$memcache->addServer()向memcache集群中添加服务器。

此外,还有get(),set(),flush(),delete()等方法,用法都大同小异,在手册上也能找得到,这里提供一个本站的php手册下载地址:https://3water.com/books/6183.html

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
Windows下PHP的任意文件执行漏洞
Oct 09 PHP
别人整理的服务器变量:$_SERVER
Oct 20 PHP
PHP编程函数安全篇
Jan 08 PHP
解析php中两种缩放图片的函数,为图片添加水印
Jun 14 PHP
浅析php插件 Simple HTML DOM 用DOM方式处理HTML
Jul 01 PHP
将php数组输出html表格的方法
Feb 24 PHP
在PHP模板引擎smarty生成随机数的方法和math函数详解
Apr 24 PHP
php中使用array_filter()函数过滤空数组的实现代码
Aug 19 PHP
php表单处理操作
Nov 16 PHP
php 提交表单 关闭layer弹窗iframe的实例讲解
Aug 20 PHP
PHP中检查isset()和!empty()函数的必要性
Feb 13 PHP
php装饰者模式简单应用案例分析
Oct 23 PHP
PHP数据库编程之MySQL优化策略概述
Aug 16 #PHP
PHP回调函数与匿名函数实例详解
Aug 16 #PHP
搭建自己的PHP MVC框架详解
Aug 16 #PHP
Laravel使用支付宝进行支付的示例代码
Aug 16 #PHP
laravel 中如何使用ajax和vue总结
Aug 16 #PHP
yii gridview实现时间段筛选功能
Aug 15 #PHP
PHP使用GD库制作验证码的方法(点击验证码或看不清会刷新验证码)
Aug 15 #PHP
You might like
javascript,php获取函数参数对象的代码
2011/02/03 PHP
让Json更懂中文(JSON_UNESCAPED_UNICODE)
2011/10/27 PHP
php实现的九九乘法口诀表简洁版
2014/07/28 PHP
php实现字符串首字母转换成大写的方法
2015/03/17 PHP
深入分析PHP优化及注意事项
2016/07/04 PHP
juqery 学习之四 筛选查找
2010/11/30 Javascript
JavaScript 高级篇之闭包、模拟类,继承(五)
2012/04/07 Javascript
页面定时刷新(1秒刷新一次)
2013/11/22 Javascript
js实现的点击数量加一可操作数据库
2014/05/09 Javascript
网页实时显示服务器时间和javscript自运行时钟
2014/06/09 Javascript
javascript使用正则控制input输入框允许输入的值方法大全
2014/06/19 Javascript
深入理解javascript变量声明
2014/11/20 Javascript
详解JavaScript语言的基本语法要求
2015/11/20 Javascript
JavaScript中关联原型链属性特性
2016/02/13 Javascript
基于bootstrap实现广告轮播带图片和文字效果
2016/07/22 Javascript
JS 实现banner图片轮播效果(鼠标事件)
2017/08/04 Javascript
一个有意思的鼠标点击文字特效jquery代码
2017/09/23 jQuery
记一次webpack3升级webpack4的踩坑经历
2018/06/12 Javascript
jquery分页优化操作实例分析
2019/08/23 jQuery
[01:14:12]2018DOTA2亚洲邀请赛4.7 总决赛 LGD vs Mineski 第二场
2018/04/09 DOTA
Python中使用dom模块生成XML文件示例
2015/04/05 Python
Python批量修改文本文件内容的方法
2016/04/29 Python
python实现本地图片转存并重命名的示例代码
2018/10/27 Python
在python中实现对list求和及求积
2018/11/14 Python
Pytorch在dataloader类中设置shuffle的随机数种子方式
2020/01/14 Python
5款实用的python 工具推荐
2020/10/13 Python
简单掌握CSS3将文字描边及填充文字颜色的方法
2016/03/07 HTML / CSS
英国最大的老式糖果店:A Quarter Of
2017/04/08 全球购物
Hush Puppies澳大利亚官网:舒适的男女休闲和正装鞋
2019/08/24 全球购物
党校学习思想汇报
2014/01/06 职场文书
大学生活动策划方案
2014/02/10 职场文书
社会实践评语
2014/04/28 职场文书
机械工程师岗位职责
2014/06/16 职场文书
怎样写辞职信
2015/02/27 职场文书
终止劳动合同通知书
2015/04/16 职场文书
简单聊聊Vue中的计算属性和属性侦听
2021/10/05 Vue.js