Lumen 基于 Laravel 打造,专为构建微服务和 APIs 而生;Redis 与 Memcached 均为常用的 key-value 内存对象缓存服务(系统),免费开源,Redis 支持持久化,但Memcached 不支持持久化。Redis 与 Memcached 均可进行集群化部署, Lumen 已对这两种系统API进行了很好的封装,使用起来更为简便。Lumen 中使用Redis可通过Predis或者PhpRedis来实现。Predis为Lumen原生支持的库,PhpRedis是PHP的C扩展,性能更高,但Lumen缺乏原生支持。

一. Redis的Docker部署

  • 创建Dockerfile-Redis:
FROM ubuntu
MAINTAINER cenze <272666745@qq.com>

RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
ADD conf/sources.list /etc/apt/
RUN apt-get update \
&& apt-get install -y gcc make vim

ENV PKGS="/usr/local/pkgs"
ADD packages/redis-3.2.8.tar.gz $PKGS/

# install redis
ENV PREFIX_REDIS="/usr/local/redis"
WORKDIR $PKGS/redis-3.2.8
RUN make \
&& make PREFIX=$PREFIX_REDIS install \
&& cp redis.conf $PREFIX_REDIS/ \
&& cp src/redis-trib.rb $PREFIX_REDIS/bin/ 

VOLUME ["/data"]
ENV PATH $PREFIX_REDIS/bin:$PATH

EXPOSE 6379

CMD ["redis-server","/usr/local/redis/redis.conf"]
  • 注意事项:
  1. redis.conf中注销行 bind 127.0.0.1 或明确绑定 IP地址集,其他容器才可访问
  2. redis.conf中若未设置密码,可能需设置 protected-mode 为 no以关闭保护模式,protected-mode 默认值为 yes
  3. 安装目录的bin下有个redis-cli可拷到其他容器中作为命令行接口来连接管理redis服务端
  4. 卷/data用于缓存数据对象的持久化存储目录
  5. build镜像:sudo docker build -t cenze/redis -f Dockerfile-Redis .
  6. run容器:sudo docker run -d --name redis cenze/redis
  7. redis-cli测试部署
    root@60c9de8c01a0:/usr/local/pkgs/redis-3.2.8# redis-cli
    127.0.0.1:6379> set cache redis
    OK
    127.0.0.1:6379> get cache
    "redis"
    127.0.0.1:6379>
    

      

( 该链接可供参考: https://github.com/dockerfile/redis/blob/master/Dockerfile )  

 二.创建Lumen项目

  • 用composer创建Lumen无法以 root/super 用户来运行,所以需要切换到其他用户环境,比如本人会运行如下命令

    su - www-data
    export PATH=/usr/local/php/bin:$PATH (这一条最好写进www-data的Home下的.profile, composer依赖PHP来运行)
    composer create-project --prefer-dist laravel/lumen lumen
  • 修改lumen下.env中参数配置:

    APP_ENV=local
    APP_DEBUG=true
    APP_KEY=dsa560943980dggjodpg
    APP_TIMEZONE=Asia/Shanghai
    
    DB_CONNECTION=mysql
    DB_HOST=[myDbHost]
    DB_PORT=3306
    DB_DATABASE=[myDataBase]
    DB_USERNAME=[myUser]
    DB_PASSWORD=[myPassword]
    
    CACHE_DRIVER=redis
    QUEUE_DRIVER=sync

三.Lumen中启用Predis

  • 安装Predis:Lumen中使用Predis需要引入 predis/predis 和 illuminate/redis两个包

    #cd path to lumen
    composer require illuminate/redis ( illuminate/redis 依赖 predis/predis,所以 predis/predis 将会自行被引入)
  • 修改lumen/vendor/laravel/lumen-framework/config/database.php中redis服务的相关配置参数:
     'redis' => [
            'cluster' => env('REDIS_CLUSTER', false),
    
            'default' => [
                'host'     => env('REDIS_HOST', '127.0.0.1'),
                'port'     => env('REDIS_PORT', 6379),
                'database' => env('REDIS_DATABASE', 0),
                'password' => env('REDIS_PASSWORD', null),
            ],
    
        ]
  • 修改lumen/bootstrap/app.php,开启$app->withFacades()和$app->withEloquent(),并注册Illuminate\Redis\RedisServiceProvider:
    $app->withFacades();
    
    $app->withEloquent();
    
    $app->register(Illuminate\Redis\RedisServiceProvider::class);
  • 修改lumen/routes/web.php:
    $app->get('/', function () use ($app) {
        //return $app->version();
        Cache::put('lumen', 'Hello, Lumen.');
        return Cache::get('lumen');
    });

    页面输出:Hello, Lumen.

四.Lumen中启用PhpRedis扩展

  • 安装PhpRedis

    pecl install redis
  • 修改lumen/bootstrap/app.php,添加如下代码:
    $app->singleton('redis', function(){
        $redis = new Redis;
        $redis->pconnect('172.17.0.3');
        return $redis;
    });
    unset($app->availableBindings['redis']);
  • 测试PhpRedis引入是否成功,修改lumen/routes/web.php:
    $app->get('/', function () use ($app) {
        //return $app->version();
        app('redis')->set('lumen', 'Hello, Lumen.');
        return app('redis')->get("key");
    });

    页面输出:Hello, Lumen.

最新文章

  1. Java并发1——线程创建、启动、生命周期与线程控制
  2. PLSQLDeveloper 常用设置
  3. C#pdf 切割成图片
  4. [转]Linux系统中‘dmesg’命令处理故障和收集系统信息的7种用法
  5. SQL SERVER 2008函数大全(含例子)
  6. Netsharp快速入门(之15) 销售管理(报表B 销售季度表)
  7. 【原】实验室签到PHP版本
  8. ios7自带的晃动效果
  9. .net常見面試題(二)
  10. id和instancetype的异同
  11. WinSock 异步I/O模型-1
  12. Linux基础入门-目录结构及文件基本操作
  13. python之路:变量与变量基本操作(老王版)
  14. NC 自定义项参照设置为查询条件
  15. etcd 增减节点
  16. c++实现对windwos 下socket 的封装(实现封包及拆包处理)
  17. SVM(支持向量机)之Hinge Loss解释
  18. Javascript 生成随机数
  19. 移动端web兼容各种分辨率写法
  20. html5-css背景

热门文章

  1. 除trigger()方法外的jquery手动触发事件
  2. VS2013 F12无法转到函数的定义处,总是从“元数据”获取的问题 ——解决方法
  3. 小结IE6的坑
  4. delphi假死线程堵塞解决办法
  5. oracle11g手工建库
  6. FineUI表格模板列Undefined问题
  7. 为什么python适合写爬虫?(python到底有啥好的?!)
  8. Android笔记:Fragment与ViewPager组合时,如何在FragmentActicity获取Fragment对象
  9. Vmware虚拟机安装Ubuntu 16.04 LTS(长期支持)版本+VMware tools安装
  10. WdatePicker 日历控件使用方法+基本常用方法