欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時間:2017年09月14日 11:01:08   作者:szphper  
這篇文章主要介紹了Laravel框架實現(xiàn)redis集群的方法,簡單分析了Laravel框架redis數(shù)據(jù)庫集群功能設置步驟、相關操作技巧與注意事項,需要的朋友可以參考下

本文實例講述了Laravel框架實現(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,接下來就可以作集群使用了;

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

我們來看下session的實現(xiàn),當我們在代碼中這樣寫:

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

實際的執(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會根據(jù)返回創(chuàng)建driver

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

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

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

最終由Illuminate\Session\Store來負責put的調用

而Store類負責存儲的類是Illuminate\Session\CacheBasedSessionHandler

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

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組中

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

Predis\Cluster\PredisClusterHashStrategy類負責計算key的hash,關鍵函數(shù):

getHash

getKeyFromFirstArgument

而Predis\Cluster\Distribution\HashRing負責服務器環(huán)的維護,關鍵函數(shù)

addNodeToRing

get

hash

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

get ok

會將ok作crc32運算得到一個hash值

所有服務器按一定算法放到一個長度默認為128的數(shù)組中,每個服務器在其中占幾項,由以下決定:

權重/總權重*總的服務器數(shù)量*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值也有了,服務器環(huán)也計算好了,剩下的就是查找了,二分法能較快的查找相應的服務器節(jié)點

更多關于Laravel相關內容感興趣的讀者可查看本站專題:《Laravel框架入門與進階教程》、《php優(yōu)秀開發(fā)框架總結》、《php面向對象程序設計入門教程》、《php+mysql數(shù)據(jù)庫操作入門教程》及《php常見數(shù)據(jù)庫操作技巧匯總

希望本文所述對大家基于Laravel框架的PHP程序設計有所幫助。

相關文章

  • PHP之mysql位運算案例講解

    PHP之mysql位運算案例講解

    這篇文章主要介紹了PHP之mysql位運算案例講解,本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內容,需要的朋友可以參考下
    2021-08-08
  • CI框架源碼解讀之URI.php中_fetch_uri_string()函數(shù)用法分析

    CI框架源碼解讀之URI.php中_fetch_uri_string()函數(shù)用法分析

    這篇文章主要介紹了CI框架源碼解讀之URI.php中_fetch_uri_string()函數(shù)用法,結合實例形式分析了CI框架中URL路由機制的原理與相關的config配置文件設置方法,需要的朋友可以參考下
    2016-05-05
  • 詳解PHP編碼轉換函數(shù)應用技巧

    詳解PHP編碼轉換函數(shù)應用技巧

    在PHP語言中mb_convert_encoding是一個PHP編碼轉換函數(shù),可以幫助我們用來實現(xiàn)對多字節(jié)字符串編碼的轉換。下面將會為大家進行詳細介紹。
    2016-10-10
  • PHP XML和數(shù)組互相轉換詳解

    PHP XML和數(shù)組互相轉換詳解

    這篇文章主要介紹了PHP XML和數(shù)組互相轉換詳解的相關資料,需要的朋友可以參考下
    2016-10-10
  • ThinkPHP中的常用查詢語言匯總

    ThinkPHP中的常用查詢語言匯總

    這篇文章主要介紹了ThinkPHP中的常用查詢語言匯總,是ThinkPHP中常用的技巧,在項目開發(fā)中非常有實用價值,需要的朋友可以參考下
    2014-08-08
  • thinkphp3.x中session方法的用法分析

    thinkphp3.x中session方法的用法分析

    這篇文章主要介紹了thinkphp3.x中session方法,全面分析了thinkPHP中session的初始化、設置、賦值、刪除、管理等各種常用操作技巧,需要的朋友可以參考下
    2016-05-05
  • PHP未登錄自動跳轉到登錄頁面

    PHP未登錄自動跳轉到登錄頁面

    為了滿足用戶體驗度,需要用戶登錄才能跳轉到頁面,這篇文章給大家分享PHP未登錄自動跳轉到登錄頁面的實例代碼,需要的朋友參考下
    2016-12-12
  • php+redis實現(xiàn)商城秒殺功能

    php+redis實現(xiàn)商城秒殺功能

    這篇文章主要為大家詳細介紹了php+redis實現(xiàn)商城秒殺功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-02-02
  • CodeIgniter輸出中文亂碼的兩種解決辦法

    CodeIgniter輸出中文亂碼的兩種解決辦法

    在controller直接echo的時候,某些瀏覽器會出現(xiàn)亂碼的情況。這篇文章主要介紹了CodeIgniter輸出中文亂碼的兩種解決辦法,需要的朋友可以參考下
    2014-06-06
  • PHP經(jīng)典面試題之設計模式(經(jīng)常遇到)

    PHP經(jīng)典面試題之設計模式(經(jīng)常遇到)

    php中設計模式非常多,但是設計模式在php面試題經(jīng)常會提到,本文主要給大家介紹php經(jīng)典面試題之設計模式,需要的朋友一起看看吧
    2015-10-10

最新評論