国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

Redis

Redis


Redis

簡(jiǎn)介

Redis 是一個(gè)開(kāi)源的,高級(jí)鍵值對(duì)存儲(chǔ)數(shù)據(jù)庫(kù)。由于它包含 字符串 , 哈希 , 列表 , 集合 , 和 有序集合 這些數(shù)據(jù)類(lèi)型,所以它通常被稱(chēng)為數(shù)據(jù)結(jié)構(gòu)服務(wù)器。

在使用 Laravel 的 Redis 之前,你需要通過(guò) Composer 安裝 predis/predis 擴(kuò)展包:

composer require predis/predis

或者,你也可以通過(guò) PECL 安裝 PhpRedis PHP 擴(kuò)展。這個(gè)擴(kuò)展安裝起來(lái)比較復(fù)雜,但對(duì)于大量使用 Redis 的應(yīng)用程序來(lái)說(shuō)可能會(huì)產(chǎn)生更好的性能。

配置

Laravel 應(yīng)用的 Redis 配置都在配置文件 config/database.php 中。在這個(gè)文件里,你可以看到 redis 數(shù)組里包含了應(yīng)用程序使用的 Redis 服務(wù)器信息:

'redis' => [ 
   'client' => 'predis',    
   'default' => [     
      'host' => env('REDIS_HOST', '127.0.0.1'),        
      'password' => env('REDIS_PASSWORD', null),        
      'port' => env('REDIS_PORT', 6379),        
      'database' => env('REDIS_DB', 0),   
      ],    
    'cache' => [     
       'host' => env('REDIS_HOST', '127.0.0.1'),        
       'password' => env('REDIS_PASSWORD', null),        
       'port' => env('REDIS_PORT', 6379),        
       'database' => env('REDIS_CACHE_DB', 1),    
      ],
  ],

默認(rèn)的服務(wù)器配置應(yīng)該足以進(jìn)行開(kāi)發(fā)。當(dāng)然,你也可以根據(jù)使用的環(huán)境來(lái)隨意更改這個(gè)數(shù)組。只需在配置文件中給每個(gè) Redis 服務(wù)器指定名稱(chēng)、host(主機(jī))和 port(端口)即可。

集群配置

如果你的應(yīng)用使用 Redis 服務(wù)器集群,你應(yīng)該在 Redis 配置文件中使用 clusters 鍵來(lái)定義這些集群:

'redis' => [
    'client' => 'predis',    
    'clusters' => [    
        'default' => [         
           [             
              'host' => env('REDIS_HOST', 'localhost'),                
              'password' => env('REDIS_PASSWORD', null),                
              'port' => env('REDIS_PORT', 6379),                
              'database' => 0,          
            ],       
          ],  
       ],
    ],

默認(rèn)情況下,集群可以在節(jié)點(diǎn)上實(shí)現(xiàn)客戶(hù)端分片,允許你實(shí)現(xiàn)節(jié)點(diǎn)池以及創(chuàng)建大量可用內(nèi)存。這里要注意,客戶(hù)端共享不會(huì)處理失敗的情況;因此,這個(gè)功能主要適用于從另一個(gè)主數(shù)據(jù)庫(kù)獲取的緩存數(shù)據(jù)。如果要使用 Redis 原生集群,需要在配置文件下的 options 鍵中做出如下指定:

'redis' => [ 
   'client' => 'predis',    
   'options' => [     
      'cluster' => 'redis',   
     ],    
   'clusters' => [   
        // ...   
     ],
  ],

Predis

除了默認(rèn)的 host, port, database, 和 password 這些服務(wù)配置選項(xiàng)外,Predis 還支持為每個(gè) Redis 服務(wù)器定義其它的鏈接參數(shù) connection parameters 。如果要使用這些額外的配置選項(xiàng),可以將以下配置添加到 Redis 服務(wù)器的配置文件 config/database.php 中:

'default' => [
    'host' => env('REDIS_HOST', 'localhost'),    
    'password' => env('REDIS_PASSWORD', null),    
    'port' => env('REDIS_PORT', 6379),    
    'database' => 0,    
    'read_write_timeout' => 60,
  ],

PhpRedis

要使用 PhpRedis 擴(kuò)展,需要將配置文件 config/database.php 中 Redis 配置的 client 選項(xiàng)修改為 phpredis

'redis' => [ 
   'client' => 'phpredis',    
   // 其余的Redis配置...
 ],

除了默認(rèn)的 host, port, databasepassword 這些服務(wù)配置選項(xiàng)外,PhpRedis 還支持以下幾個(gè)額外的連接參數(shù): persistent, prefix, read_timeouttimeout 。你可以將這些配置選項(xiàng)添加到配置文件 config/database.php 中 Redis 服務(wù)配置項(xiàng)下:

'default' => [
    'host' => env('REDIS_HOST', 'localhost'),    
    'password' => env('REDIS_PASSWORD', null),    
    'port' => env('REDIS_PORT', 6379),    
    'database' => 0,    
    'read_timeout' => 60,
  ],

Redis 交互

你可以通過(guò)調(diào)用 Redis facade 上的各種方法來(lái)與 Redis 交互。Redis facade 支持動(dòng)態(tài)方法,意味著你可以在 facade 上調(diào)用各種 Redis 命令 ,命令將直接傳遞給 Redis。在示例中,將通過(guò) Redis facade 上的 get 方法來(lái)調(diào)用 Redis 上的 GET 命令:

<?php
    namespace App\Http\Controllers;
    use App\Http\Controllers\Controller;
    use Illuminate\Support\Facades\Redis;
    class UserController extends Controller{   
     /**
     * 顯示給定用戶(hù)的配置文件。
     *
     * @param  int  $id
     * @return Response
     */   
    public function showProfile($id)   
     {     
        $user = Redis::get('user:profile:'.$id);        
        return view('user.profile', ['user' => $user]);    
      }
   }

如上所述,你可以在 Redis facade 上調(diào)用任意 Redis 命令。Laravel 使用魔術(shù)方法將命令傳遞給 Redis 服務(wù)器,因此只需傳遞 Redis 命令所需的參數(shù)即可:

Redis::set('name', 'Taylor');
$values = Redis::lrange('names', 5, 10);

或者,你也可以使用 command 方法將命令傳遞給服務(wù)器,它接受命令的名稱(chēng)作為其第一個(gè)參數(shù),并將值的數(shù)組作為其第二個(gè)參數(shù):

$values = Redis::command('lrange', ['name', 5, 10]);

使用多個(gè) Redis 連接

你可以通過(guò) Redis::connection 方法獲得 Redis 實(shí)例:

$redis = Redis::connection();

這會(huì)返回一個(gè)默認(rèn)的 Redis 實(shí)例。你可以傳遞連接或者集群名稱(chēng)給 connection 方法來(lái)獲取在 Redis 配置中特定服務(wù)或集群:

$redis = Redis::connection('my-connection');

管道命令

當(dāng)你需要在一個(gè)操作中給服務(wù)器發(fā)送很多命令時(shí),推薦你使用管道命令。 pipeline 方法接受一個(gè) Redis 實(shí)例的 閉包 。你可以將所有的命令發(fā)送給 Redis 實(shí)例,它們都會(huì)在一個(gè)操作中執(zhí)行完成:

Redis::pipeline(function ($pipe) { 
   for ($i = 0; $i < 1000; $i++) {     
      $pipe->set("key:$i", $i);   
      }
  });

發(fā)布與訂閱

Laravel 為 Redis 的 publishsubscribe 提供了方便的接口。這些 Redis 命令讓你可以監(jiān)聽(tīng)指定「頻道」上的消息。你可以從另一個(gè)應(yīng)用程序發(fā)布消息給另一個(gè)應(yīng)用程序,甚至使用其它編程語(yǔ)言,讓?xiě)?yīng)用程序和進(jìn)程之間能夠輕松進(jìn)行通信。

首先,我們使用 subscribe 方法設(shè)置頻道監(jiān)聽(tīng)器。我們將這個(gè)方法調(diào)用放在 Artisan 命令 中,因?yàn)檎{(diào)用 subscribe 方法會(huì)啟動(dòng)一個(gè)長(zhǎng)時(shí)間運(yùn)行的進(jìn)程:

<?php
    namespace App\Console\Commands;
    use Illuminate\Console\Command;
    use Illuminate\Support\Facades\Redis;
    class RedisSubscribe extends Command{  
      /**
     * 控制臺(tái)命令的名稱(chēng)和簽名。
     *
     * @var string
     */ 
      protected $signature = 'redis:subscribe';    
    /**
     * 控制臺(tái)命令說(shuō)明。
     *
     * @var string
     */    
    protected $description = 'Subscribe to a Redis channel';    
    /**
     * 執(zhí)行控制臺(tái)命令。
     *
     * @return mixed
     */   
      public function handle()  
        {      
          Redis::subscribe(['test-channel'], function ($message) {      
                echo $message;        
               });  
        }
     }

現(xiàn)在我們可以使用 publish 方法將消息發(fā)布到頻道:

Route::get('publish', function () {  
  // 路由...    
  Redis::publish('test-channel', json_encode(['foo' => 'bar']));
});

通配符訂閱

使用 psubscribe 方法可以訂閱通配符頻道,可以用來(lái)在所有頻道上獲取所有消息。 $channel 名稱(chēng)將作為第二個(gè)參數(shù)傳遞給提供的回調(diào) 閉包:

Redis::psubscribe(['*'], function ($message, $channel) {
    echo $message;});Redis::psubscribe(['users.*'], function ($message, $channel) {
        echo $message;
     });
本文章首發(fā)在 LearnKu.com 網(wǎng)站上。