当前位置:首页 > 日记 > 正文

Laravel框架实现redis集群的方法分析

Laravel框架实现redis集群的方法分析

本文实例讲述了Laravel框架实现redis集群的方法。分享给大家供大家参考,具体如下:

在app/config/database.php中配置如下:

'redis' => array(    'cluster' => true,    'default' => array(      'host'   => '172.21.107.247',      'port'   => 6379,    ),   'redis1' => array(      'host'   => '172.21.107.248',      'port'   => 6379,    ),

其中cluster选择为true,接下来就可以作集群使用了;

如果把session的driver设置为redis,则可以使用其集群功能了:

我们来看下session的实现,当我们在代码中这样写:

Session::put('test', 124);

实际的执行流程是这样的:

Illuminate\Support\Facades\SessionIlluminate\Support\Facades\FacadeIlluminate\Session\Facade::app['session']->putIlluminate\Session\Facade::app['session']为Illuminate\Session\SessionManagerIlluminate\Support\Manager::__call

Session会根据返回创建driver

$this->app['config']['session.driver']

即配置文件中配置的,这里我们配置为redis

Illuminate\Session\SessionManager::Illuminate\Session\SessionManager

最终由Illuminate\Session\Store来负责put的调用

而Store类负责存储的类是Illuminate\Session\CacheBasedSessionHandler

后者又将请求转发给$this->app['cache']->driver($driver)
……
经过一系列代码追查,存储类为Predis\Client\Database,看其构造函数:

public function __construct(array $servers = array()){    if (isset($servers['cluster']) && $servers['cluster'])    {      $this->clients = $this->createAggregateClient($servers);    }    else    {      $this->clients = $this->createSingleClients($servers);    }}

如果设置为集群,则调用createAggregateClient方法

protected function createAggregateClient(array $servers){    $servers = array_except($servers, array('cluster'));    return array('default' => new Client(array_values($servers)));}

这里会把所有服务器放在default组中

实际存数据的类是Predis\Client,这里有根据配置创建服务器的代码,具体可以自己看下;

Predis\Cluster\PredisClusterHashStrategy类负责计算key的hash,关键函数:

getHash

getKeyFromFirstArgument

而Predis\Cluster\Distribution\HashRing负责服务器环的维护,关键函数

addNodeToRing

get

hash

大概原理是这样,如执行以下redis命令

get ok

会将ok作crc32运算得到一个hash值

所有服务器按一定算法放到一个长度默认为128的数组中,每个服务器在其中占几项,由以下决定:

权重/总权重*总的服务器数量*128,可参考Predis\Cluster\Distribution\HashRing::addNodeToRing方法

每一项的hash值是按服务器ip:端口的格式,作crc32计算的

protected function addNodeToRing(&$ring, $node, $totalNodes, $replicas, $weightRatio){    $nodeObject = $node['object'];    $nodeHash = $this->getNodeHash($nodeObject);    $replicas = (int) round($weightRatio * $totalNodes * $replicas);    for ($i = 0; $i < $replicas; $i++) {      $key = crc32("$nodeHash:$i");      $ring[$key] = $nodeObject;    }}

key的hash值也有了,服务器环也计算好了,剩下的就是查找了,二分法能较快的查找相应的服务器节点

更多关于Laravel相关内容感兴趣的读者可查看本站专题:《Laravel框架入门与进阶教程》、《php优秀开发框架总结》、《php面向对象程序设计入门教程》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》

希望本文所述对大家基于Laravel框架的PHP程序设计有所帮助。

相关文章

编写Linux设备驱动程序

编写Linux设备驱动程序

设备驱动程序,电脑软件,Linux,序言 Linux是Unix操作系统的一种变种,在Linux下编写驱动程序的原理和思想完全类似于其他的Unix系统,但它dos或window环境下的驱动程序有很大的区别。在Linux环境下设计驱动程序,思想简洁,操作方便,功能也很强大,…

Apache之AllowOverride参数详解

Apache之AllowOverride参数详解

参数详解,电脑软件,Apache,AllowOverride,通常利用Apache的rewrite模块对 URL 进行重写的时候, rewrite规则会写在 .htaccess 文件里。但要使 apache 能够正常的读取.htaccess 文件的内容,就必须对.htaccess 所在目录进行配置。从安全性考虑,…

win7怎么激活

win7怎么激活

激活,电脑软件,电脑开机后壁纸变成黑色,右下角提示此windows副本不是正版,这是因为win7系统没有激活造成的。下面小编教大家如何解决。方法一:1.打开win7的开始菜单,点击&ldquo;搜索程序和文件&rdquo;,输入&ldquo;cmd&rdquo;并按键盘回车。2.这…

Bootstrap Scrollspy源码学习

Bootstrap Scrollspy源码学习

学习,源码,电脑软件,Bootstrap,Scrollspy,本文实例为大家分享了Bootstrap Scrollspy插件的具体代码,供大家参考,具体内容如下导航栏Scrollspy例子<!-- The scrollable area --><body data-spy="scroll" data-target=".navbar" data-offse…

浅谈Vue父子组件和非父子组件传值

浅谈Vue父子组件和非父子组件传值

组件,传值,父子,浅谈,电脑软件,本文介绍了浅谈Vue父子组件和非父子组件传值问题,分享给大家,具体如下:1.如何创建组件1.新建一个组件,如:在goods文件夹下新建goodsList.vue<template> <div class='tmpl'> goodsList组件 </div></template…

Linux系统下像windows系统下修改ho

Linux系统下像windows系统下修改ho

系统,文件,修改,绑定域名,地址,例如:localhost 127.0.0.1 127.0.0.1 当访问 时,实际上是访问127.0.0.1 这样的用处是用域名调试本地程序。在Windows下只需要修改:C:\Windows\System32\drivers\etc\hosts\hosts 文件即可(用记事本打…

一个Js文件函数中调用另一个Js文件

一个Js文件函数中调用另一个Js文件

文件,函数,方法,调用,演示,我们知道,在html中,利用<script language="javascript" type="text/javascript" src="./script.js"></script>引入的两个js是不可以相互调用的。那么该如何解决呢?当然,你可以将代码通通copy过来,也许你并不喜欢…

PHP实现腾讯与百度坐标转换

PHP实现腾讯与百度坐标转换

坐标转换,百度,腾讯,电脑软件,PHP,废话不多说,直接上代码public function coordinate_switch($a,$b){//百度转腾讯坐标转换 $x = (double)$b - 0.0065; $y = (double)$a - 0.006; $x_pi = 3.14159265358979324; $z = sqrt($x * $x+$y * …

如何在Word2003文档修改修改添加备

如何在Word2003文档修改修改添加备

修改,文档,备忘录,如何在,电脑软件,一般来说,评审会修改原文件的内容,你可以添加注释的修改的地方。这是修订后的功能的话,这主要是因为我们之前的话使方便。以下是小编辑给你带来了关于修订内容在帮助你希望添加一个文件格式。 内容之前修改…

php实现中文转数字

php实现中文转数字

中文,转数,电脑软件,php,分享一个辅助函数,使用php尽可能识别出字符串中的数字,先上代码function checkNatInt($str) { $map = array( '一' => '1','二' => '2','三' => '3','四' => '4','五' => '5','六' => '6…

cdr中想要制作艺术蜡笔效果的?

cdr中想要制作艺术蜡笔效果的?

蜡笔,效果,艺术,电脑软件,cdr,cdr中想要制作一个蜡笔画效果的图,该怎么给图片制作蜡笔效果呢?下面我们就来看看详细的教程。软件名称:CorelDraw x6 (Cdr x6) 官方简体中文破解版(32位)安装图文教程、破解注册方法软件大小:更新时间:2014-08-271、…

PS淘宝金属皮带扣图形美化过程共享

PS淘宝金属皮带扣图形美化过程共享

淘宝,图形,过程,电脑软件,PS,版权:原作者JamesVin 感谢JamesVin 原有的经验分享! PS淘宝金属皮带扣的朋友照片修饰美化过程分享的整个过程,金属皮带扣的修饰和美化材料,包括抠图、分类、运动模糊、噪声+灯+面膜11部分,强调的是实用,初学者可能会…