久久久久久久av_日韩在线中文_看一级毛片视频_日本精品二区_成人深夜福利视频_武道仙尊动漫在线观看

Laravel框架實現redis集群的方法分析

這篇文章主要介紹了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\Session
Illuminate\Support\Facades\Facade
Illuminate\Session\Facade::app['session']->put
Illuminate\Session\Facade::app['session']為Illuminate\Session\SessionManager
Illuminate\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程序設計有所幫助。

【網站聲明】本站除付費源碼經過測試外,其他素材未做測試,不保證完整性,網站上部分源碼僅限學習交流,請勿用于商業用途。如損害你的權益請聯系客服QQ:2655101040 給予處理,謝謝支持。

相關文檔推薦

這篇文章主要為大家詳細介紹了php+redis消息隊列搶購實現代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
這篇文章主要為大家詳細介紹了php+redis實現商城秒殺功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
這篇文章主要介紹了PHP基于redis計數器類定義與用法,結合實例形式較為詳細的分析了php定義的redis計數器類及其相關使用技巧,需要的朋友可以參考下
Laravel以其簡潔、優雅的特性贏得了大家的廣泛關注,無論是專家還是新手,在開發PHP項目的時候,都會第一時間的想到Laravel。本文我們將討論為什么Laravel會成為最成功的PHP框架
這篇文章主要給大家介紹了關于利用swoole+redis實現股票和區塊鏈服務的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下
這篇文章主要介紹了PHP實現的Redis多庫選擇功能單例類,結合實例形式分析了php采用單例模式實現redis數據庫的多庫選擇功能,需要的朋友可以參考下
主站蜘蛛池模板: 欧美日韩高清在线一区 | 性一爱一乱一交一视频 | 精品一区二区在线看 | 国产精品久久福利 | 精品国产99 | 自拍偷拍亚洲欧美 | 国产精品69毛片高清亚洲 | 涩爱av一区二区三区 | 精品中文字幕一区二区三区 | av日日操 | 亚洲一区二区视频在线播放 | 国产免费自拍 | 最新毛片网站 | 伊人网伊人 | 91色在线 | 丁香五月缴情综合网 | 免费毛片网 | 久久久久久久久淑女av国产精品 | 欧美精品一区二区三区蜜桃视频 | 亚洲精品视频免费 | 亚洲综合成人网 | 国产a区| 婷婷精品 | 中文字幕第49页 | 一区二区三区亚洲精品国 | 中文字幕综合 | 久久人人爽人人爽 | 国产91网站在线观看 | 国产乱码精品一区二区三区中文 | 日韩精品无码一区二区三区 | 美女在线视频一区二区三区 | 精品国产乱码久久久久久丨区2区 | 精品欧美一区二区精品久久久 | 成人免费在线小视频 | 亚洲一区二区三区四区五区午夜 | 欧美日韩高清在线观看 | 国产一区二区三区四区五区加勒比 | 自拍偷拍亚洲一区 | 亚洲精品免费视频 | 91色网站 | 日本人做爰大片免费观看一老师 |