Laravel Memcached缓存驱动的配置与应用方法分析


Posted in PHP onOctober 08, 2016

本文实例讲述了Laravel Memcached缓存驱动的配置与应用方法。分享给大家供大家参考,具体如下:

Memcached缓存配置在任何php环境下我们都可以配置使用来提升WEB的性能。对于大型网站(数据多,访问量大)而言,缓存系统是必备组件,其为减轻数据库负载、提高页面访问速度、提升系统性能立下汗马功劳。Laravel作为一个功能完善且强大的PHP框架,自然为缓存系统提供了支持。目前Laravle支持的缓存驱动包括文件、数组、数据库、APC、Memcached和Redis,并且为这些驱动提供了统一的存取接口,这样做的好处显而易见:我们可以根据业务需求随时切换缓存驱动而不用对业务逻辑代码做任何修改。

Laravel缓存驱动配置位于config/cache.php,该配置数组中第一个配置项default用于指定默认缓存驱动:

'default' => env('CACHE_DRIVER', 'file'),

这里默认缓存驱动为文件缓存。第二配置项stores是重头戏,用于配置Laravel支持的6种缓存驱动:

'stores' => [
  'apc' => [
    'driver' => 'apc',
  ],
  'array' => [
    'driver' => 'array',
  ],
  'database' => [
    'driver' => 'database',
    'table' => 'cache',
    'connection' => null,
  ],
  'file' => [
    'driver' => 'file',
    'path' => storage_path('framework/cache'),
  ],
  'memcached' => [
    'driver' => 'memcached',
    'servers' => [
      [
        'host' => '127.0.0.1',
        'port' => 11211,
        'weight' => 100,
      ],
    ],
  ],
  'redis' => [
    'driver' => 'redis',
    'connection' => 'default',
  ],
],

其中apc表示APC缓存,APC是PHP的一个扩展,其目标是为缓存和优化PHP中间码(opcode)提供一个免费、开源、健壮的框架。更多详情可参考PHP官方文档:http://php.net/manual/zh/book.apc.php,APC缓存和Memcached一样都是基于内存的缓存系统,性能相当,但局限是只能用于单机缓存,不支持分布式,而实际生产环境往往并不止一台web服务器,所以相对而言,大型网站更多选择使用Memcached。

数组缓存驱动(array)往往仅仅用于测试,好处是不会持久化,只会在一次PHP脚本执行的生命周期内有效。

文件缓存驱动(file)往往只用于本地开发测试,因为文件缓存将缓存存储到文件中,读取时从硬盘读取,性能自然不及基于内存的缓存系统如APC或Memcached以及Redis。

数据库缓存驱动(database)将缓存数据存储到数据库中,使用之前需要在数据库中新建一张表用于存放缓存项,该表表结构可定义如下:

Schema::create('cache', function($table) {
  $table->string('key')->unique();
  $table->text('value');
  $table->integer('expiration');
});

缓存本来就是将数据库中的数据读取后存放到缓存系统,虽然数据库缓存在一定程度上提升了系统性能,但对于大型系统而言自然不是最佳选择。

memcached缓存驱动基于Memcached,使用之前需要先在系统中安装Memcached,当然如果你使用的是Homestead虚拟机的话,已经为你安装好了,并且开机自动启动,我们可以使用如下指令查看其状态及启动端口:

ps -ef | grep memcached

正如我们前面提到的,Memcached是基于内存的分布式缓存系统,在实际生产环境中有着广泛使用。

Redis是近几年才出现的缓存系统,相比Memcached的键值对而言支持更多的数据结构,包括字符串、哈希、列表、集合和有序集合等,正因如此,又被称作数据结构服务器,Redis也是基于内存的,但是可以持久化到硬盘。除了作为缓存系统外,还可以用作NoSQL数据库、消息队列等。总而言之,功能很强大。关于Redis我们后续会单独讲,所以缓存实例这一块我们将以Memcached作为缓存驱动为例,系统的讲讲Laravel中如何使用缓存。

从配置文件说起,memcached配置项中的driver指定使用的缓存驱动类型为memcached。servers表示使用的安装Memcached的服务器,host代表主机名,port代表Memcached监听的端口号,默认为11211,weight代表权重,因为很多时候我们配置了多台Memcached服务器,权重表示存取的优先级。

作为测试,这里我们就使用默认配置好了。

开始之前我们要将默认缓存驱动改成memcached:

'default' => env('CACHE_DRIVER', 'memcached'),

此外,config/cache.php配置文件中还有最后一个配置项prefix,用于配置缓存键的前缀,对于基于内存的缓存系统而言,缓存项可能被同一主机上的多个应用使用,所以加上前缀以示区别还是很有必要的。这里我们使用laravelacademy作为前缀好了:

'prefix' => 'laravelacademy',

希望本文所述对大家基于Laravel框架的PHP程序设计有所帮助。

PHP 相关文章推荐
PHP 中英文混合排版中处理字符串常用的函数
Apr 12 PHP
基于php伪静态的实现详细介绍
Apr 28 PHP
phpmyadmin config.inc.php配置示例
Aug 27 PHP
ThinkPHP模板比较标签用法详解
Jun 30 PHP
PHP中exec函数和shell_exec函数的区别
Aug 20 PHP
PHP输出一个等腰三角形的方法
May 12 PHP
基于PHP实现短信验证码接口(容联运通讯)
Sep 06 PHP
php版微信自动获取收货地址api用法示例
Sep 22 PHP
Yii框架实现记录日志到自定义文件的方法
May 23 PHP
php获取数据库中数据的实现方法
Jun 01 PHP
PHP生成(支持多模板)二维码海报代码
Apr 30 PHP
PHP去除空数组且数组键名重置的讲解
Feb 28 PHP
yii通过小物件生成view的方法
Oct 08 #PHP
php获取服务器操作系统相关信息的方法
Oct 08 #PHP
Yii2创建多界面主题(Theme)的方法
Oct 08 #PHP
php微信开发之自定义菜单完整流程
Oct 08 #PHP
yii2.0数据库迁移教程【多个数据库同时同步数据】
Oct 08 #PHP
yii2高级应用之自定义组件实现全局使用图片上传功能的方法
Oct 08 #PHP
ThinkPHP发送邮件示例代码
Oct 08 #PHP
You might like
PHP中的cookie
2006/11/26 PHP
PHP的pcntl多进程用法实例
2015/03/19 PHP
php实现mysql数据库分表分段备份
2015/06/18 PHP
PHP yield关键字功能与用法分析
2019/01/03 PHP
PHPStudy下如何为Apache安装SSL证书的方法步骤
2019/01/23 PHP
PHP 命名空间和自动加载原理与用法实例分析
2020/04/29 PHP
jQuery 图像裁剪插件Jcrop的简单使用
2009/05/22 Javascript
jquery判断RadioButtonList和RadioButton中是否有选中项示例
2013/09/29 Javascript
文档对象模型DOM通俗讲解
2013/11/01 Javascript
javaScript中两个等于号和三个等于号之间的区别介绍
2014/06/27 Javascript
重写document.write实现无阻塞加载js广告(补充)
2014/12/12 Javascript
JavaScript判断是否为数组的3种方法及效率比较
2015/04/01 Javascript
js仿苹果iwatch外观的计时器代码分享
2015/08/26 Javascript
JS实现同一个网页布局滑动门和TAB选项卡实例
2015/09/23 Javascript
学习JavaScript事件流和事件处理程序
2016/01/25 Javascript
用canvas 实现个图片三角化(LOW POLY)效果
2016/02/18 Javascript
jQuery模仿阿里云购买服务器选择购买时间长度的代码
2016/04/29 Javascript
Vue.js一个文件对应一个组件实践
2016/10/27 Javascript
浅谈事件冒泡、事件委托、jQuery元素节点操作、滚轮事件与函数节流
2017/07/22 jQuery
jq.ajax+php+mysql实现关键字模糊查询(示例讲解)
2018/01/02 Javascript
Vue实现动态创建和删除数据的方法
2018/03/17 Javascript
[02:20]DOTA2英雄基础教程 黑暗贤者
2013/12/19 DOTA
[02:30]辉夜杯主赛事第二日胜者组半决赛 CDEC.Y赛后采访
2015/12/26 DOTA
[02:04]完美世界城市挑战赛秋季赛报名开始 谁是solo路人王?
2019/10/10 DOTA
python实现代理服务功能实例
2013/11/15 Python
Python实现在Linux系统下更改当前进程运行用户
2015/02/04 Python
Python用for循环实现九九乘法表
2018/05/31 Python
python解析yaml文件过程详解
2019/08/30 Python
python装饰器使用实例详解
2019/12/14 Python
PyCharm中如何直接使用Anaconda已安装的库
2020/05/28 Python
CSS3毛玻璃效果(blur)有白边问题的解决方法
2016/11/15 HTML / CSS
css3一个简易的 LED 数字时钟实现方法
2020/01/15 HTML / CSS
canvas画图被放大且模糊的解决方法
2020/08/11 HTML / CSS
Boden美国官网:英伦原创时装品牌
2017/07/03 全球购物
《在家里》教后反思
2014/03/01 职场文书
爱护公共设施的标语
2014/06/24 职场文书