pbootcms网站模板|日韩1区2区|织梦模板||网站源码|日韩1区2区|jquery建站特效-html5模板网

Laravel框架實(shí)現(xiàn)redis集群的方法分析

這篇文章主要介紹了Laravel框架實(shí)現(xiàn)redis集群的方法,簡(jiǎn)單分析了Laravel框架redis數(shù)據(jù)庫(kù)集群功能設(shè)置步驟、相關(guān)操作技巧與注意事項(xiàng),需要的朋友可以參考下

本文實(shí)例講述了Laravel框架實(shí)現(xiàn)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,接下來(lái)就可以作集群使用了;

如果把session的driver設(shè)置為redis,則可以使用其集群功能了:

我們來(lái)看下session的實(shí)現(xiàn),當(dāng)我們?cè)诖a中這樣寫:

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

實(shí)際的執(zhí)行流程是這樣的:

Illuminate\Support\Facades\Session
Illuminate\Support\Facades\Facade
Illuminate\Session\Facade::app['session']->put
Illuminate\Session\Facade::app['session']為Illuminate\Session\SessionManager
Illuminate\Support\Manager::__call

Session會(huì)根據(jù)返回創(chuàng)建driver

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

即配置文件中配置的,這里我們配置為redis

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

最終由Illuminate\Session\Store來(lái)負(fù)責(zé)put的調(diào)用

而Store類負(fù)責(zé)存儲(chǔ)的類是Illuminate\Session\CacheBasedSessionHandler

后者又將請(qǐng)求轉(zhuǎn)發(fā)給$this->app['cache']->driver($driver)
……
經(jīng)過(guò)一系列代碼追查,存儲(chǔ)類為Predis\Client\Database,看其構(gòu)造函數(shù):

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

如果設(shè)置為集群,則調(diào)用createAggregateClient方法

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

這里會(huì)把所有服務(wù)器放在default組中

實(shí)際存數(shù)據(jù)的類是Predis\Client,這里有根據(jù)配置創(chuàng)建服務(wù)器的代碼,具體可以自己看下;

Predis\Cluster\PredisClusterHashStrategy類負(fù)責(zé)計(jì)算key的hash,關(guān)鍵函數(shù):

getHash

getKeyFromFirstArgument

而Predis\Cluster\Distribution\HashRing負(fù)責(zé)服務(wù)器環(huán)的維護(hù),關(guān)鍵函數(shù)

addNodeToRing

get

hash

大概原理是這樣,如執(zhí)行以下redis命令

get ok

會(huì)將ok作crc32運(yùn)算得到一個(gè)hash值

所有服務(wù)器按一定算法放到一個(gè)長(zhǎng)度默認(rèn)為128的數(shù)組中,每個(gè)服務(wù)器在其中占幾項(xiàng),由以下決定:

權(quán)重/總權(quán)重*總的服務(wù)器數(shù)量*128,可參考Predis\Cluster\Distribution\HashRing::addNodeToRing方法

每一項(xiàng)的hash值是按服務(wù)器ip:端口的格式,作crc32計(jì)算的

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值也有了,服務(wù)器環(huán)也計(jì)算好了,剩下的就是查找了,二分法能較快的查找相應(yīng)的服務(wù)器節(jié)點(diǎn)

更多關(guān)于Laravel相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Laravel框架入門與進(jìn)階教程》、《php優(yōu)秀開(kāi)發(fā)框架總結(jié)》、《php面向?qū)ο蟪绦蛟O(shè)計(jì)入門教程》、《php+mysql數(shù)據(jù)庫(kù)操作入門教程》及《php常見(jiàn)數(shù)據(jù)庫(kù)操作技巧匯總》

希望本文所述對(duì)大家基于Laravel框架的PHP程序設(shè)計(jì)有所幫助。

【網(wǎng)站聲明】本站除付費(fèi)源碼經(jīng)過(guò)測(cè)試外,其他素材未做測(cè)試,不保證完整性,網(wǎng)站上部分源碼僅限學(xué)習(xí)交流,請(qǐng)勿用于商業(yè)用途。如損害你的權(quán)益請(qǐng)聯(lián)系客服QQ:2655101040 給予處理,謝謝支持。

相關(guān)文檔推薦

這篇文章主要為大家詳細(xì)介紹了php+redis消息隊(duì)列搶購(gòu)實(shí)現(xiàn)代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
這篇文章主要為大家詳細(xì)介紹了php+redis實(shí)現(xiàn)商城秒殺功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
這篇文章主要介紹了PHP基于redis計(jì)數(shù)器類定義與用法,結(jié)合實(shí)例形式較為詳細(xì)的分析了php定義的redis計(jì)數(shù)器類及其相關(guān)使用技巧,需要的朋友可以參考下
Laravel以其簡(jiǎn)潔、優(yōu)雅的特性贏得了大家的廣泛關(guān)注,無(wú)論是專家還是新手,在開(kāi)發(fā)PHP項(xiàng)目的時(shí)候,都會(huì)第一時(shí)間的想到Laravel。本文我們將討論為什么Laravel會(huì)成為最成功的PHP框架
這篇文章主要給大家介紹了關(guān)于利用swoole+redis實(shí)現(xiàn)股票和區(qū)塊鏈服務(wù)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下
這篇文章主要介紹了PHP實(shí)現(xiàn)的Redis多庫(kù)選擇功能單例類,結(jié)合實(shí)例形式分析了php采用單例模式實(shí)現(xiàn)redis數(shù)據(jù)庫(kù)的多庫(kù)選擇功能,需要的朋友可以參考下
主站蜘蛛池模板: 艾乐贝拉细胞研究中心 | 国家组织工程种子细胞库华南分库 | 南京种植牙医院【官方挂号】_南京治疗种植牙医院那个好_南京看种植牙哪里好_南京茀莱堡口腔医院 尼龙PA610树脂,尼龙PA612树脂,尼龙PA1010树脂,透明尼龙-谷骐科技【官网】 | POS机办理_个人pos机免费领取-银联pos机申请首页 | lcd条形屏-液晶长条屏-户外广告屏-条形智能显示屏-深圳市条形智能电子有限公司 | 气动隔膜泵厂家-温州永嘉定远泵阀有限公司 | 上海平衡机-单面卧式动平衡机-万向节动平衡机-圈带动平衡机厂家-上海申岢动平衡机制造有限公司 | 踏板力计,制动仪,非接触多功能速度仪,逆反射系数测试仪-创宇 | 诺冠气动元件,诺冠电磁阀,海隆防爆阀,norgren气缸-山东锦隆自动化科技有限公司 | 回转支承-转盘轴承-回转驱动生产厂家-洛阳隆达轴承有限公司 | 深圳美安可自动化设备有限公司,喷码机,定制喷码机,二维码喷码机,深圳喷码机,纸箱喷码机,东莞喷码机 UV喷码机,日期喷码机,鸡蛋喷码机,管芯喷码机,管内壁喷码机,喷码机厂家 | 隔爆型防爆端子分线箱_防爆空气开关箱|依客思 | 废旧物资回收公司_广州废旧设备回收_报废设备物资回收-益美工厂设备回收公司 | 宝鸡市人民医院 | DWS物流设备_扫码称重量方一体机_快递包裹分拣机_广东高臻智能装备有限公司 | 精雕机-火花机-精雕机 cnc-高速精雕机-电火花机-广东鼎拓机械科技有限公司 | 粘度计,数显粘度计,指针旋转粘度计 | 温湿度记录纸_圆盘_横河记录纸|霍尼韦尔记录仪-广州汤米斯机电设备有限公司 | 合肥宠物店装修_合肥宠物美容院装修_合肥宠物医院设计装修公司-安徽盛世和居装饰 | 地磅-电子地磅维修-电子吊秤-汽车衡-无人值守系统-公路治超-鹰牌衡器 | ★店家乐|服装销售管理软件|服装店收银系统|内衣店鞋店进销存软件|连锁店管理软件|收银软件手机版|会员管理系统-手机版,云版,App | 高低温试验箱-模拟高低温试验箱订制-北京普桑达仪器科技有限公司【官网】 | 北京网站建设首页,做网站选【优站网】,专注北京网站建设,北京网站推广,天津网站建设,天津网站推广,小程序,手机APP的开发。 | 食品机械专用传感器-落料放大器-低价接近开关-菲德自控技术(天津)有限公司 | 贴片电容-贴片电阻-二三极管-国巨|三星|风华贴片电容代理商-深圳伟哲电子 | 昆明网络公司|云南网络公司|昆明网站建设公司|昆明网页设计|云南网站制作|新媒体运营公司|APP开发|小程序研发|尽在昆明奥远科技有限公司 | 马尔表面粗糙度仪-MAHR-T500Hommel-Mitutoyo粗糙度仪-笃挚仪器 | 硬度计,金相磨抛机_厂家-莱州华煜众信试验仪器有限公司 | 工业铝型材生产厂家_铝合金型材配件批发精加工定制厂商 - 上海岐易铝业 | 北京发电机出租_发电机租赁_北京发电机维修 - 河北腾伦发电机出租 | 煤矿支护网片_矿用勾花菱形网_缝管式_管缝式锚杆-邯郸市永年区志涛工矿配件有限公司 | 手术室净化装修-手术室净化工程公司-华锐手术室净化厂家 | 登车桥动力单元-非标液压泵站-非标液压系统-深圳市三好科技有限公司 | SMN-1/SMN-A ABB抽屉开关柜触头夹紧力检测仪-SMN-B/SMN-C-上海徐吉 | 联系我们-腾龙公司上分客服微信19116098882 | 防火阀、排烟防火阀、电动防火阀产品生产销售商-德州凯亿空调设备有限公司 | 浙江美尔凯特智能厨卫股份有限公司| 细胞染色-流式双标-试剂盒免费代做-上海研谨生物科技有限公司 | 校服厂家,英伦校服定做工厂,园服生产定制厂商-东莞市艾咪天使校服 | 超声波_清洗机_超声波清洗机专业生产厂家-深圳市好顺超声设备有限公司 | 重庆轻质隔墙板-重庆安吉升科技有限公司 | 玻璃钢板-玻璃钢防腐瓦-玻璃钢材料-广东壹诺 |