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.

Docker笔记二:Lumen & Redis的更多相关文章

  1. Docker笔记(二) 安装常用软件

    常用环境安装 这里收集一些常用环境的安装步骤,可直接复制进行使用,节省安装时间,后续会随时补充 安装MySQL5.7.32 下载mysql5.7.32的镜像 ( 记得下载镜像要先确保镜像仓库中存在这个 ...

  2. Redis学习笔记(二):Redis集群

    集群通过分片(sharding)来进行数据共享,并提供复制和故障转移功能.   1.节点 一个节点就是一个运行在集群模式下的Redis服务器.启动Redis服务器时,通过判断cluster-enabl ...

  3. Redis学习笔记二 (BitMap算法分析与BitCount语法)

    Redis学习笔记二 一.BitMap是什么 就是通过一个bit位来表示某个元素对应的值或者状态,其中的key就是对应元素本身.我们知道8个bit可以组成一个Byte,所以bitmap本身会极大的节省 ...

  4. python3.4学习笔记(二十五) Python 调用mysql redis实例代码

    python3.4学习笔记(二十五) Python 调用mysql redis实例代码 #coding: utf-8 __author__ = 'zdz8207' #python2.7 import ...

  5. python3.4学习笔记(二十四) Python pycharm window安装redis MySQL-python相关方法

    python3.4学习笔记(二十四) Python pycharm window安装redis MySQL-python相关方法window安装redis,下载Redis的压缩包https://git ...

  6. docker学习笔记二:常用命令

    docker学习笔记二:常用命令 查看docker常用命令 docker --help 返回结果如下: 其中常用的命令如下: 1.image相关操作 展示所有的image: 删除image: rmi ...

  7. Docker笔记(七):常用服务安装——Nginx、MySql、Redis

    开发中经常需要安装一些常用的服务软件,如Nginx.MySql.Redis等,如果按照普通的安装方法,一般都相对比较繁琐 —— 要经过下载软件或源码包,编译安装,配置,启动等步骤,使用 Docker ...

  8. Docker笔记:常用服务安装——Nginx、MySql、Redis(转载)

    转载地址:https://www.cnblogs.com/spec-dog/p/11320513.html 开发中经常需要安装一些常用的服务软件,如Nginx.MySql.Redis等,如果按照普通的 ...

  9. redis相关笔记(二.集群配置及使用)

    redis笔记一 redis笔记二 redis笔记三 1.配置:在原redis-sentinel文件夹中添加{8337,8338,8339,8340}文件夹,且复制原8333中的配置 在上述8333配 ...

随机推荐

  1. 直播流怎么存储在Ceph对象存储上? Linux内存文件系统tmpfs(/dev/shm) 的应用

    一./dev/shm理论 默认的Linux发行版中的内核配置都会开启tmpfs,映射到了/dev/下的shm目录.可以通过df 命令查看结果./dev/shm/是linux下一个非常有用的目录,因为这 ...

  2. nodejs那些事

    安装篇: 1.从http://nodejs.cn/上下载了nodejs-v4.4.4版安装包(已存入360云盘) 2.在windows下双击——下一步——下一步安装即可(注意:安装路径就默认安装到C: ...

  3. [c#]解决方案:需要“jquery”ScriptResourceMapping。请添加一个名为 jquery (区分大小写)的 ScriptResourceMapping。

    问题详情 如下图所示(部分): 出现该错误,是因为应用程序中需要使用到jquery(现在的web应用程序哪个能离开jquery呢),而目前程序目录中并没有jquery文件,或者有jquery文件但是程 ...

  4. 前言《iOS网络高级编程:iPhone和iPad的企业应用开发》(书籍学习)

    本书内容: 在客户端设备与服务器之间执行HTTP请求 管理客户端设备与服务器之间的数据负载 处理HTTP请求的错误 保护网络通信 改进网络通信的性能 执行Socket层的通信 实现推送通知 单个设备上 ...

  5. apache 添加 ssl_module

    下载httpd2.2.6,以前用http2.2.4会出问题(出现个什么lib的错误) ./configure --prefix=/usr/local/apache --enable-ssl --ena ...

  6. PHP做负载均衡回话保持问题参考

    最近一个项目的服务器老是出现Session数据丢失问题,导致用户莫名其妙的退出,原因是太相信我们的运维人员所谓的负载均衡会话保持的概念.会话保持 的原理就是负载均衡通过Cookie来分发那个客户连接被 ...

  7. js原生继承之——原型式继承实例

    <!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8&qu ...

  8. TTP 错误 404.3 - Not Found 由于扩展配置问题而无法提供您请求的页面。如果该页面是脚本,请添加处理程序。如果应下载文件,请添加 MIME 映射。

    解决办法一: 控制面板->打开或关闭windows功能->Internet信息服务->万维网服务->应用程序开发功能. 勾选上“.net扩展性”和“ASP.NET”,保存后,重 ...

  9. POJ2479(dp)

    Maximum sum Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 39089   Accepted: 12221 Des ...

  10. 【Android】 分享一个完整的项目,适合新手!

    写这个app之前是因为看了头条的一篇文章:http://www.managershare.com/post/155110,然后心想要不做一个这样的app,让手机计算就行了.也就没多想就去开始整了.   ...