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中目录,文件操作详谈
Mar 19 PHP
php中获取关键词及所属来源搜索引擎名称的代码
Feb 15 PHP
深入了解 register_globals (附register_globals=off 网站打不开的解决方法)
Jun 27 PHP
PHP中图片等比缩放的实例
Mar 24 PHP
Function eregi is deprecated (解决方法)
Jun 21 PHP
PHP中浮点数计算比较及取整不准确的解决方法
Jan 09 PHP
PHP经典面试题集锦
Mar 19 PHP
迪菲-赫尔曼密钥交换(Diffie?Hellman)算法原理和PHP实现版
May 12 PHP
老生常谈PHP 文件写入和读取(必看篇)
May 22 PHP
PHP unlink与rmdir删除目录及目录下所有文件实例代码
Feb 07 PHP
thinkphp5.1框架中容器(Container)和门面(Facade)的实现方法分析
Aug 05 PHP
php进程(线程)通信基础之System V共享内存简单实例分析
Nov 09 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类
2006/11/25 PHP
ThinkPHP框架结合Ajax实现用户名校验功能示例
2019/07/03 PHP
js获取多个tagname的节点数组
2013/09/22 Javascript
javascript验证邮件地址和MX记录的方法
2015/06/16 Javascript
NodeJS的Promise的用法解析
2016/05/05 NodeJs
jQuery插件zTree实现的多选树效果示例
2017/03/08 Javascript
Vue.js实战之组件之间的数据传递
2017/04/01 Javascript
js实现延迟加载的几种方法
2017/04/24 Javascript
vue如何引入sass全局变量
2018/06/28 Javascript
NodeJS读取分析Nginx错误日志的方法
2019/05/14 NodeJs
createObjectURL方法实现本地图片预览
2019/09/30 Javascript
微信小程序云函数添加数据到数据库的方法
2020/03/04 Javascript
javascript实现计算器功能
2020/03/30 Javascript
微信小程序实现多图上传
2020/06/19 Javascript
详解在IDEA中将Echarts引入web两种方式(使用js文件和maven的依赖导入)
2020/07/11 Javascript
[02:43]2018DOTA2亚洲邀请赛主赛事首日TOP5
2018/04/04 DOTA
Django框架中处理URLconf中特定的URL的方法
2015/07/20 Python
Python 专题三 字符串的基础知识
2017/03/19 Python
浅谈python函数之作用域(python3.5)
2017/10/27 Python
Python使用zip合并相邻列表项的方法示例
2018/03/17 Python
keras load model时出现Missing Layer错误的解决方式
2020/06/11 Python
Python如何定义接口和抽象类
2020/07/28 Python
Python tkinter界面实现历史天气查询的示例代码
2020/08/23 Python
通俗讲解python 装饰器
2020/09/07 Python
Python中读取文件名中的数字的实例详解
2020/12/25 Python
CSS3之边框多颜色Border-color属性使用示例
2013/10/11 HTML / CSS
利用CSS3实现进度条的两种姿势详解
2017/03/21 HTML / CSS
西班牙第一的网上药房:PromoFarma.com
2017/04/17 全球购物
MCAKE蛋糕官方网站:一直都是巴黎的味道
2018/02/06 全球购物
如何写一个自定义标签
2012/12/28 面试题
幼儿园门卫制度
2014/01/29 职场文书
国家税务局领导班子对照检查材料思想汇报
2014/10/04 职场文书
党员对十八届四中全会的期盼思想汇报范文
2014/10/17 职场文书
教代会开幕词
2015/01/28 职场文书
指导教师推荐意见
2015/06/05 职场文书
Nginx+Windows搭建域名访问环境的操作方法
2022/03/17 Servers