PHP的Laravel框架结合MySQL与Redis数据库的使用部署


Posted in PHP onMarch 21, 2016

相对于熟读官方文档,更重要的是要把框架环境搭起来。
零、环境介绍

  • 操作系统:centOS
  • 数据库: mysql 5.6 (阿里云RDS)
  • PHP 5.4.4 (>=5.4即可)
  • Laravel 5.0

一、安装LNMP
在安装Laravel之前,需要把Linux + Nginx + Mysql + Php的环境搭建好。具体的搭建步骤这里就不再详述了。
P.S.

  • Linux阿里云已经自带了,本文使用的是centOS 6.5 64位的ECS
  • 关于Nginx和Apache的选择看自己喜好,本文使用的是反向代理能手Nginx
  • 是否安装Mysql也要看自己的情况,例如你使用阿里云的RDS,那就没必要安装了

二、安装Composer
composer是用来管理PHP包依赖的工具,Laravel正使用此工具进来依赖管理。有两种安装方式

局部安装
全局安装,即在系统任意目录下可使用。本文只介绍此种安装方法。官方安装文档

分别执行以下两条命令

curl -sS https://getcomposer.org/installer | php
mv composer.phar /usr/local/bin/composer

安装完成,使用以下命令看是否安装成功

composer -V

出现版本号,即说明安装成功

三、安装Laravel
按照Laravel的官方文档说明即可,建议使用【通过Laravel安装工具】,没什么坑,这里略过
提示:由于Laravel还依赖于一些的PHP扩展,所以使用yum安装

sudo install yum php-mysql php-mcrypt php-mbstring php-tokenizer php-openssl

安装完成后,在Nginx的配置文件(一般是/etc/nginx/conf.d/default.conf)最下方添加如下配置

location / {
  try_files $uri $uri/ /index.php?$query_string;
}

来到你的laravel工程目录下,看到storage和vendor文件夹,使用以下命令修改其文件读写权限,让Nginx用户能读写它

sudo chmod -R 766 storage
sudo chmod -R 766 vendor

四、让MVC跑起来!
在此之前,你应该读一下官方文档 路由、控制器、数据库使用基础、Eloquent ORM
至此,可以开始coding,开发一个 MVC的demo了,此demo的功能是将数据库表tbl_item从数据库里读出来,并以json格式响应给浏览器。
假设你已经通过laravel new demo来初始化你的web app。

  • 数据库里建库(demo)、建表(tbl_item),(字段随意定)
  • 配置配置文件 config/database.php
  • 直接操作数据库,往tbl_item里插入一条数据
  • 开始coding

demo/app/http/routes.php底部添加如下代码:

Route::get('/item/{id}', 'ItemController@showItem');

demo/app/http/controllers/ 目录新添文件 ItemController.php,代码如下:

<?php namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Item as Item;

class ItemController extends Controller {

  private $model;

  public function __construct()
  {
    $this->model = new Item();
  }

  public function showItem($id)
  {
    $users = $this->model->fetchAll();
    echo json_encode($users);
    Log::info('获取用户列表,通过msyql');
  }
}

demo/app/目录下新增文件 Item.php 代码如下

<?php namespace App;

use Illuminate\Database\Eloquent\Model;

class Item extends Model {

  protected $fillable = ['name', 'price'];
  protected $guarded = ['id'];

  /**
   * The database table used by the model.
   * default: tbl_items
   * @var string
   */
  // protected $table = 'tbl_items';

  public function fetchAll(){
    $items = $this->all()->toJson();
    return $items;
  }
}

使用浏览器访问http://yourIp/item/1,即可列出所有的item数据

五、Laravel结合Redis
直连DB是不够的,很快数据库访问就会成为系统的瓶颈。我们引入缓存Redis。还是一样的思路,先让系统跑起来。
1、安装启动Redis

安装

$ wget http://download.redis.io/releases/redis-3.0.1.tar.gz
$ tar xzf redis-3.0.1.tar.gz
$ cd redis-3.0.1
$ make

启动

$ src/redis-server

查看官方下载和安装文档,只需要几个命令即可

2、安装PHP PRedis
PRedis是PHP访问redis的扩展包,只需要下载原码即可,不需要安装PHP扩展(如php-redis.so)。但在这之前要介绍一个composer,因为laravel通过它来安装第三方程序包(管理依赖关系)。

cd 到你的App所在路径,修改composer.json,在require字段里,添加"predis/predis":"~1.0.1",然后当前目录下 sudo composer update,此时就会自动下载包需要的扩展包,这些扩展包将会被放在vendor目录下。如果出现内存不够这些报错,现在看来是内存分配不够的原因,重启一下服务器即可,彻底解决的办法要修改服务器配置,但我不清楚改哪里,后续再补

配置相关配置,查看官方文档即可。主要是配置config/database.php

'redis' => array(
  'cluster' => false,
  'default' => array('host' => '127.0.0.1', 'port' => 6379)
)

3、coding

<?php namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\User as User;
use Illuminate\Support\Facades\Redis as Redis;

class UserController extends Controller {

  // use User;

  private $model;
  /**
   * Create a new controller instance.
   *
   * @return void
   */
  public function __construct()
  {
    $this->model = new User();
  }

  /**
   * Show 
   *
   * @return Response
   */
  public function showUser($id)
  {
    $redis = Redis::connection('default');
    $cacheUsers = $redis->get('userList');

    if( $cacheUsers ){
      $users = $cacheUsers;
      print_r($users);
      Log::info('获取用户列表,通过redis');
    }else{
      $users = $this->model->fetchAll();
      $redis->set('userList', $users);
      print_r($users);
      Log::info('获取用户列表,通过msyql');
    }
  }
}
PHP 相关文章推荐
用PHP和MySQL保存和输出图片
Oct 09 PHP
php date与gmdate的获取日期的区别
Feb 08 PHP
php读取文件内容至字符串中,同时去除换行、空行、行首行尾空格(Zjmainstay原创)
Jul 31 PHP
PHP中CURL方法curl_setopt()函数的参数分享
Jan 19 PHP
PHP命名空间(Namespace)的使用详解
May 04 PHP
PHP传参之传值与传址的区别
Apr 24 PHP
浅析iis7.5安装配置php环境
May 10 PHP
PHP入门教程之自定义函数用法详解(创建,调用,变量,参数,返回值等)
Sep 11 PHP
php reset() 函数指针指向数组中的第一个元素并输出实例代码
Nov 21 PHP
详解php用curl调用接口方法,get和post两种方式
Jan 13 PHP
PHP中file_put_contents追加和换行的实现方法
Apr 01 PHP
PDO::prepare讲解
Jan 29 PHP
PHP编写学校网站上新生注册登陆程序的实例分享
Mar 21 #PHP
调用WordPress函数统计文章访问量及PHP原生计数器的实现
Mar 21 #PHP
PHP程序中的文件锁、互斥锁、读写锁使用技巧解析
Mar 21 #PHP
PHP编程中尝试程序并发的几种方式总结
Mar 21 #PHP
PHP的Laravel框架中使用消息队列queue及异步队列的方法
Mar 21 #PHP
Zend Framework框架之Zend_Mail实现发送Email邮件验证功能及解决标题乱码的方法
Mar 21 #PHP
Zend Framework教程之Zend_Form组件实现表单提交并显示错误提示的方法
Mar 21 #PHP
You might like
PHP中使用sleep函数实现定时任务实例分享
2014/08/21 PHP
php中get_meta_tags()、CURL与user-agent用法分析
2014/12/16 PHP
php中memcache 基本操作实例
2015/05/17 PHP
PHP封装的Twitter访问类实例
2015/07/18 PHP
Laravel 5.3 学习笔记之 错误&amp;日志
2016/08/28 PHP
PHP判断是否是微信打开还是浏览器打开的方法
2019/02/27 PHP
laravel admin实现分类树/模型树的示例代码
2020/06/10 PHP
一个刚完成的layout(拖动流畅,不受iframe影响)
2007/08/17 Javascript
JQuery入门——用bind方法绑定事件处理函数应用介绍
2013/02/05 Javascript
jQuery使用andSelf()来包含之前的选择集
2014/05/19 Javascript
原生javascript实现的分页插件pagenav
2014/08/28 Javascript
javascript常用正则表达式汇总
2015/07/31 Javascript
JS实现关闭当前页而不弹出提示框的方法
2016/06/22 Javascript
基于node搭建服务器,写接口,调接口,跨域的实例
2018/05/13 Javascript
vue-vuex中使用commit提交mutation来修改state的方法详解
2018/09/16 Javascript
js实现搜索提示框效果
2020/09/05 Javascript
[27:28]Ti4 冒泡赛第二天 iG vs NEWBEE 1
2014/07/15 DOTA
[07:38]2014DOTA2国际邀请赛 Newbee顺利挺进胜者组赛后专访
2014/07/15 DOTA
Python 代码性能优化技巧分享
2012/08/07 Python
Python中利用函数装饰器实现备忘功能
2015/03/30 Python
pandas Dataframe行列读取的实例
2018/06/08 Python
python通过txt文件批量安装依赖包的实现步骤
2019/08/13 Python
在PyCharm中遇到pip安装 失败问题及解决方案(pip失效时的解决方案)
2020/03/10 Python
anaconda3安装及jupyter环境配置全教程
2020/08/24 Python
利用Python将多张图片合成视频的实现
2020/11/23 Python
用Python实现童年贪吃蛇小游戏功能的实例代码
2020/12/07 Python
Html5实现移动端、PC端 刮刮卡效果
2016/06/30 HTML / CSS
微软台湾官方网站:Microsoft台湾
2018/08/15 全球购物
几道Java和数据库的面试题
2013/05/30 面试题
合同专员岗位职责
2013/12/18 职场文书
自动化专业职业生涯规划书范文
2014/01/16 职场文书
民警群众路线教育实践活动对照检查材料
2014/10/04 职场文书
2015年健康教育工作总结
2015/04/10 职场文书
2016十一国庆节慰问信
2015/12/01 职场文书
2016年中学端午节主题活动总结
2016/04/01 职场文书
Go获取两个时区的时间差
2022/04/20 Golang