Lumen 基于 Laravel 打造,专为构建微服务和 APIs 而生。Lumen与Redis服务端通讯可经过Predis(PHP库)或者PhpRedis(PHP的C扩展)来实现,建议使用PhpRedis,其性能更高。Lumen下使用Predis和PhpRedis都需引入illuminate/redis(PHP库),illuminate/redis(PHP库)都对Predis和PhpRedis(Laravel 5.3以上)进行了很好的封装,但illuminate/redis(PHP库)又依赖predis/predis(PHP库),故安装 illuminate/redis时会自动引入predis/predis(PHP库)。php
Redis 与 Memcached 均为经常使用的 key-value 分布式内存对象缓存系统,可提供数据缓存和数据共享能力,Redis 支持持久化,而 memcached 不支持持久化,发生重启后数据不会自动恢复。mysql
关于Memcached:laravel
A 64bit "CAS" value, which is kept unique.
下边这段是关于文本协议“noreply”的描述,同时建议使用二进制协议:git
Most ASCII commands allow a "noreply" version. One should not normally use this with the ASCII protocol, as it is impossible to align errors with requests. The intent is to avoid having to wait for a return packet after executing a mutation command (such as a set or add). The binary protocol properly implements noreply (quiet) statements. If you have a client which supports or uses the binary protocol, odds are good you may take advantage of this.
下边这段是关于“A Well Designed Binary Protocol Client”的描述:github
With the binary protocol, it(A Well Designed Binary Protocol Client may take many application threads and use a single TCP connection back to memcached) is possible to pack requests from different client instances into the same TCP socket, then dole back results to the right owners.
关于Redis(REmote DIctionary Server, 远程字典服务器):SSDB支持LevelDB,是Redis的替代品,且与其兼容。web
RDB:在save、shutdown、slave时触发写二进制文件,粒度大,若是这些操做未完成以前crash可能致使丢失一部分数据。
经过fork一个进程,copy-on-write把整个db保存下来,而主进程不会进行任何IO操做,保证了redis的高性能。
AOF:持续把写操做命令格式化后追加到日志文件的尾部,粒度较小,crash以后数据丢失小。AOF支持不一样的fsync策略,
包括无fsync、每秒fsync、请求时fsync,默认为每秒fsync策略。fsync是由后台线程完成的,主线程继续努
力地执行写请求。AOF是文本文件,一般也比RDB文件大,恢复速度慢。
一. Redis的Docker部署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"]
注意事项:算法
sudo docker build -t cenze/redis -f Dockerfile-Redis .
sudo docker run -d --name redis cenze/redis
redis-cli或netcat(nc)或telnet测试部署:redis-cli下输入 help <Tab> 可按组查询命令列表sql
root@60c9de8c01a0:/usr/local/pkgs/redis-3.2.8# redis-cli -h 127.0.0.1 127.0.0.1:6379> set cache redis OK 127.0.0.1:6379> get cache "redis" 127.0.0.1:6379>
二.建立Lumen项目docker
composer建立Lumen:
composer
没法以 root/super 用户来运行,因此须要切换到其余用户环境,好比本人会运行以下命令
su - www-data export PATH=/usr/local/php/bin:$PATH (这一条最好写进Home下的.profile, composer依赖PHP来运行) composer create-project --prefer-dist laravel/lumen lumen
.env参数配置:
APP_ENV=local APP_DEBUG=true APP_KEY=bcee22b233721b47c6043e6bf35ac4ee 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 REDIS_HOST= 172.17.0.3 REDIS_PORT= 6379
三.Lumen中启用Predis
cd /path/to/lumen
composer require illuminate/redis (predis/predis为illuminate/redis所依赖,故将被自动安装上)
'redis' => [ 'client' => 'predis', //'client' => 'phpredis', 'cluster' => env('REDIS_CLUSTER', false), 'default' => [ 'host' => env('REDIS_HOST', 'localhost'), 'port' => env('REDIS_PORT', 6379), 'database' => env('REDIS_DATABASE', 0), 'password' => env('REDIS_PASSWORD', null), ], ],
$app->register(Illuminate\Redis\RedisServiceProvider::class); $app->withFacades();//同时启用Facades $app->withEloquent();//同时启用Eloquent
$app->get('/', function () use ($app) { //return $app->version(); Cache::put('lumen', 'Hello, Lumen.', 5); return Cache::get('lumen'); });
页面输出:Hello, Lumen.
四.Lumen中启用PhpRedis扩展
pecl install redis (有可能须要手动安装 autoconf,phpize依赖该工具)
composer require illuminate/redis
注意事项:该C扩展安装完后须要修改php.ini添加行extension=redis.so。若是php在cli模式下运行未发现Redis,多是由于你的php.ini文件没有找到,该文件为安装配置项--with-config-file-path所指定,默认位于PREFIX/lib目录下,因此应在启动php时添加-c选项指定配置文件或php.ini所在目录。
1)修改lumen/bootstrap/app.php,添加以下代码:
$app->singleton('redis', function(){ $redis = new Redis; $redis->pconnect('172.17.0.3'); return $redis; }); unset($app->availableBindings['redis']);
$app->get('/', function () use ($app) { //return $app->version(); app('redis')->set('lumen', 'Hello, Lumen.'); return app('redis')->get("key"); });