当前位置: 首页 > 后端技术 > PHP

laravelredis主从配置

时间:2023-03-29 17:50:47 PHP

redis主从服务器配置略过。下面根据你已经配置好了,在laravel环境下如何使用。配置laravel使用predis扩展composerrequirepredis/predisviconfig/database.php'redis'=>['cluster'=>false,'default'=>["tcp://".环境(“REDIS_DEFAULT_HOST”)。“:”.env(“REDIS_DEFAULT_PORT”)。"?database=0&alias=master",//master"tcp://".env("REDIS_DEFAULT_HOST_R")。“:”.env(“REDIS_DEFAULT_PORT_R”)。"?database=0&alias=slave_1",//来自"tcp://".env("REDIS_DEFAULT_HOST_R2")。":".env("REDIS_DEFAULT_PORT_R2")."?database=0&alias=slave_2",//from],'test'=>['host'=>'127.0.0.1','port'=>6379,'database'=>1,],//队列使用多命令'options'=>['replication'=>true,'connections'=>['tcp'=>'\App\Services\Redis',],],];//master-slavevendor/predis/predis/src/Connection/Aggregate/SentinelReplication.php:189publicfunctionadd(NodeConnectionInterface$connection){$alias=$connection->getParameters()->alias;}if($alias==='master'){$this->master=$connection;}else{$this->slaves[$alias?:count($this->slaves)]=$connection;}$this->reset();}viapp/services/redis.php//参考https://github.com/nrk/predis/blob/v1.1/examples/debuggable_connection.phpnamespaceApp\Services;use\Predis\Command\CommandInterface;use\Predis\Connection\StreamConnection;类Redis扩展StreamConnection{private$tstart=0;私人$debugBuffer=[];publicfunctionconnect(){$this->tstart=microtime(true);父母::连接();}privatefunctionstoreDebug(CommandInterface$command,$direction){$firtsArg=$command->getArguments();$timestamp=(microtime(true)-$this->tstart)*1000;$日志=[];$log['cmd']=$command->getId();$log['key']=isset($firtsArg)?$firtsArg:'';$log['server']="$direction$this";$日志['时间']=$时间戳;$data=['server'=>trim($log['server']),'cmd'=>$command->getId(),'key'=>$log['key'],'time'=>$timestamp,'msg'=>['host'=>explode(':',trim($log['server']))[0],'port'=>explode(':',trim($日志['服务器']))[1]]]];openlog('syslog',LOG_PID|LOG_ODELAY,LOG_LOCAL7);系统日志(LOG_INFO,json_encode($数据));关闭日志();转储($日志);$this->debugBuffer[]=$log;}publicfunctionwriteRequest(CommandInterface$command){parent::writeRequest($command);//$this->storeDebug($command,'->');}publicfunctionreadResponse(CommandInterface$command){$response=parent::readResponse($command);$this->storeDebug($command,'');返回$r响应;}publicfunctiongetDebugBuffer(){return$this->debugBuffer;}publicstaticfunctiondebug(){$options=['connections'=>['tcp'=>'\App\Services\Redis',],];$client=new\Predis\Client(config('database.redis.default'),$options);$client->get('redis:test');print_r($client->getConnection());}}注意看文档https://github.com/nrk/predis需要将replication设置为true复制模式下使用客户端所需的基本配置需要一台Redis服务器被识别为master(这可以通过连接参数来完成usingthealiasparametersettomaster)andaormoreserversactingasslaves:使用//实体参数包含义vendor/predis/predis/src/Connection/ParametersInterface.php:16$redis=new\Predis\Client(['scheme'=>'tcp','主机'=>'127.0.0.1','端口'=>6379,'read_write_timeout'=>0,]);$redis=\Redis::connection('默认');$key='master:test';$redis->set($key,666);//tail-f/var/log/messages查看Redis日志可以看到从服务器REDIS_DEFAULT_HOST_Rdump($redis->get($key));//查看Redis日志可以看到主服务器REDIS_DEFAULT_HOST