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的类 功能齐全的发送邮件类
Oct 09 PHP
相对路径转化成绝对路径
Apr 10 PHP
探讨如何在php168_cms中提取验证码
Jun 08 PHP
VIM中设置php自动缩进为4个空格的方法详解
Jun 14 PHP
PHP 文件编程综合案例-文件上传的实现
Jul 03 PHP
PHP连接和操作MySQL数据库基础教程
Sep 29 PHP
编写PHP脚本过滤用户上传的图片
Jul 03 PHP
PHP+shell脚本操作Memcached和Apache Status的实例分享
Mar 11 PHP
Windows2003下php5.4安装配置教程(IIS)
Jun 30 PHP
php使用GD2绘制几何图形示例
Feb 15 PHP
PHP数组式访问接口ArrayAccess用法分析
Dec 28 PHP
PHP快速排序算法实现的原理及代码详解
Apr 03 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程序员应该了解MongoDB的五件事
2013/06/03 PHP
PHP echo,print,printf,sprintf函数之间的区别与用法详解
2013/11/27 PHP
微信开发之网页授权获取用户信息(二)
2016/01/08 PHP
PHP策略模式定义与用法示例
2017/07/27 PHP
jQuery DIV弹出效果实现代码
2009/07/03 Javascript
JavaScript 学习初步 入门教程
2010/03/25 Javascript
关于jquery中动态增加select,事件无效的快速解决方法
2016/08/29 Javascript
jQuery+CSS3实现四种应用广泛的导航条制作实例详解
2016/09/17 Javascript
Vue声明式渲染详解
2017/05/17 Javascript
JavaScript之Map和Set_动力节点Java学院整理
2017/06/29 Javascript
JS实现为动态创建的元素添加事件操作示例
2018/03/17 Javascript
解决echarts的多个折现数据出现坐标和值对不上的问题
2018/12/28 Javascript
js的新生代垃圾回收知识点总结
2019/08/22 Javascript
js实现简单贪吃蛇游戏
2020/05/15 Javascript
vuejs element table 表格添加行,修改,单独删除行,批量删除行操作
2020/07/18 Javascript
[02:44]DOTA2英雄基础教程 克林克兹
2014/01/15 DOTA
[11:57]《一刀刀一天》第十七期:TI中国军团加油!
2014/05/26 DOTA
python处理文本文件实现生成指定格式文件的方法
2014/07/31 Python
设计模式中的原型模式在Python程序中的应用示例
2016/03/02 Python
python内置函数:lambda、map、filter简单介绍
2017/11/16 Python
python3.6+django2.0开发一套学员管理系统
2018/03/03 Python
Python实现合并两个列表的方法分析
2018/05/28 Python
python实现微信机器人: 登录微信、消息接收、自动回复功能
2019/04/29 Python
python SQLAlchemy的Mapping与Declarative详解
2019/07/04 Python
python 利用turtle模块画出没有角的方格
2019/11/23 Python
mac 上配置Pycharm连接远程服务器并实现使用远程服务器Python解释器的方法
2020/03/19 Python
浅谈keras通过model.fit_generator训练模型(节省内存)
2020/06/17 Python
浅谈盘点5种基于Python生成的个性化语音方法
2021/02/05 Python
CSS3教程(5):网页背景图片
2009/04/02 HTML / CSS
西尔斯百货官网:Sears
2016/09/06 全球购物
印度最好的在线药品订购网站:PharmEasy
2018/11/30 全球购物
Python中如何定义一个函数
2016/09/06 面试题
客户经理岗位职责
2015/01/31 职场文书
优秀党员个人总结
2015/02/14 职场文书
爱心捐书倡议书
2015/04/27 职场文书
详解Python如何批量采集京东商品数据流程
2022/01/22 Python