<article><h1>Laravel 的 Redis 使用指南</h1><ul><li><a href="#introduction">簡介</a><ul><li><a href="#configuration">配置</a></li><li><a href="#predis">Predis</a></li><li><a href="#phpredis">PhpRedis</a></li></ul></li><li><a href="#interacting-with-redis">基本用法</a><ul><li><a href="#pipelining-commands">管道化命令</a></li></ul></li><li><a href="#pubsub">發布與訂閱</a></li></ul><p><a name="introduction"></a></p><h2><a href="#introduction">簡介</a></h2><p><a href="http://redis.io">Redis</a> 是一款開源且先進的鍵值對數據庫。由于它的鍵指向的數據包含了 <a href="http://redis.io/topics/data-types#strings">字符串</a>、<a href="http://redis.io/topics/data-types#hashes">哈希</a>、<a href="http://redis.io/topics/data-types#lists">列表</a>、<a href="http://redis.io/topics/data-types#sets">集合</a> 和 <a href="http://redis.io/topics/data-types#sorted-sets">有序集合</a> 這些數據類型,因此常被用作數據結構服務器。</p><p>在使用 Redis 之前,你需要通過 Composer 安裝 <code class=" language-php">predis<span class="token operator">/</span>predis</code> 擴展包。</p><pre class=" language-php"><code class=" language-php">composer <span class="token keyword">require</span> predis<span class="token operator">/</span>predis</code></pre><p>還有一種選擇,你可以通過 PECL 安裝 <a href="https://github.com/phpredis/phpredis">PhpRedis</a> PHP 擴展。這個擴展安裝起來更復雜,但是你可以在你的程序重度使用 redis 時獲得一定的性能提升。</p><p><a name="configuration"></a></p><h3>配置</h3><p>應用程序的 Redis 配置都在 <code class=" language-php">config<span class="token operator">/</span>database<span class="token punctuation">.</span>php</code> 配置文件中。在這個文件里,你可以看到 <code class=" language-php">redis</code> 數組里面包含了應用程序使用的 Redis 服務器:</p><pre class=" language-php"><code class=" language-php"><span class="token string">'redis'</span> <span class="token operator">=</span><span class="token operator">></span> <span class="token punctuation">[</span>
<span class="token string">'client'</span> <span class="token operator">=</span><span class="token operator">></span> <span class="token string">'predis'</span><span class="token punctuation">,</span>
<span class="token string">'default'</span> <span class="token operator">=</span><span class="token operator">></span> <span class="token punctuation">[</span>
<span class="token string">'host'</span> <span class="token operator">=</span><span class="token operator">></span> <span class="token function">env<span class="token punctuation">(</span></span><span class="token string">'REDIS_HOST'</span><span class="token punctuation">,</span> <span class="token string">'localhost'</span><span class="token punctuation">)</span><span class="token punctuation">,</span>
<span class="token string">'password'</span> <span class="token operator">=</span><span class="token operator">></span> <span class="token function">env<span class="token punctuation">(</span></span><span class="token string">'REDIS_PASSWORD'</span><span class="token punctuation">,</span> <span class="token keyword">null</span><span class="token punctuation">)</span><span class="token punctuation">,</span>
<span class="token string">'port'</span> <span class="token operator">=</span><span class="token operator">></span> <span class="token function">env<span class="token punctuation">(</span></span><span class="token string">'REDIS_PORT'</span><span class="token punctuation">,</span> <span class="token number">6379</span><span class="token punctuation">)</span><span class="token punctuation">,</span>
<span class="token string">'database'</span> <span class="token operator">=</span><span class="token operator">></span> <span class="token number">0</span><span class="token punctuation">,</span>
<span class="token punctuation">]</span><span class="token punctuation">,</span>
<span class="token punctuation">]</span><span class="token punctuation">,</span></code></pre><p>默認的服務器配置對于開發來說應該足夠了。當然,你也可以根據使用的環境來隨意更改數組。只需給每個 Redis 服務器指定名稱、host 和 port 即可。</p><blockquote><p>譯者注: 關于 Redis 多連接的配置,請參閱 - <a href="https://laravel-china.org/topics/2466">Laravel 下配置 Redis 讓緩存、Session 各自使用不同的 Redis 數據庫</a>。</p></blockquote><h4>redis 集群配置</h4><p>如果你的程序使用 redis 服務器集群,你應該在 redis 配置文件中使用 <code class=" language-php">clusters</code> 鍵來定義:</p><pre class=" language-php"><code class=" language-php"><span class="token string">'redis'</span> <span class="token operator">=</span><span class="token operator">></span> <span class="token punctuation">[</span>
<span class="token string">'client'</span> <span class="token operator">=</span><span class="token operator">></span> <span class="token string">'predis'</span><span class="token punctuation">,</span>
<span class="token string">'clusters'</span> <span class="token operator">=</span><span class="token operator">></span> <span class="token punctuation">[</span>
<span class="token string">'default'</span> <span class="token operator">=</span><span class="token operator">></span> <span class="token punctuation">[</span>
<span class="token punctuation">[</span>
<span class="token string">'host'</span> <span class="token operator">=</span><span class="token operator">></span> <span class="token function">env<span class="token punctuation">(</span></span><span class="token string">'REDIS_HOST'</span><span class="token punctuation">,</span> <span class="token string">'localhost'</span><span class="token punctuation">)</span><span class="token punctuation">,</span>
<span class="token string">'password'</span> <span class="token operator">=</span><span class="token operator">></span> <span class="token function">env<span class="token punctuation">(</span></span><span class="token string">'REDIS_PASSWORD'</span><span class="token punctuation">,</span> <span class="token keyword">null</span><span class="token punctuation">)</span><span class="token punctuation">,</span>
<span class="token string">'port'</span> <span class="token operator">=</span><span class="token operator">></span> <span class="token function">env<span class="token punctuation">(</span></span><span class="token string">'REDIS_PORT'</span><span class="token punctuation">,</span> <span class="token number">6379</span><span class="token punctuation">)</span><span class="token punctuation">,</span>
<span class="token string">'database'</span> <span class="token operator">=</span><span class="token operator">></span> <span class="token number">0</span><span class="token punctuation">,</span>
<span class="token punctuation">]</span><span class="token punctuation">,</span>
<span class="token punctuation">]</span><span class="token punctuation">,</span>
<span class="token punctuation">]</span><span class="token punctuation">,</span>
<span class="token punctuation">]</span><span class="token punctuation">,</span></code></pre><p>默認情況下,集群可以實現跨節點間客戶端共享,允許你實現節點池以及創建大量可用內存。然而,注意客戶端共享并沒有處理失敗情況;因此,主要適用于從另一個主要的數據源來建立緩存數據。如果你喜歡使用 redis 原生集群,你需要在配置文件中配置 <code class=" language-php">options</code> 鍵:</p><pre class=" language-php"><code class=" language-php"><span class="token string">'redis'</span> <span class="token operator">=</span><span class="token operator">></span> <span class="token punctuation">[</span>
<span class="token string">'client'</span> <span class="token operator">=</span><span class="token operator">></span> <span class="token string">'predis'</span><span class="token punctuation">,</span>
<span class="token string">'options'</span> <span class="token operator">=</span><span class="token operator">></span> <span class="token punctuation">[</span>
<span class="token string">'cluster'</span> <span class="token operator">=</span><span class="token operator">></span> <span class="token string">'redis'</span><span class="token punctuation">,</span>
<span class="token punctuation">]</span><span class="token punctuation">,</span>
<span class="token string">'clusters'</span> <span class="token operator">=</span><span class="token operator">></span> <span class="token punctuation">[</span>
<span class="token comment" spellcheck="true"> // ...
</span> <span class="token punctuation">]</span><span class="token punctuation">,</span>
<span class="token punctuation">]</span><span class="token punctuation">,</span></code></pre><p><a name="predis"></a></p><h3>Predis</h3><p>除了默認的 <code class=" language-php">Host</code>,<code class=" language-php">port</code>,<code class=" language-php">database</code> 和 <code class=" language-php">password</code> 服務配置項之外,Predis 還可以為每個 redis 定義其他的 <a href="https://github.com/nrk/predis/wiki/Connection-Parameters">連接參數</a>。要使用這些額外的配置選項,只需將它們添加到你的 <code class=" language-php">config<span class="token operator">/</span>database<span class="token punctuation">.</span>php</code> 配置文件的 Redis 服務器配置項中即可:</p><pre class=" language-php"><code class=" language-php"><span class="token string">'default'</span> <span class="token operator">=</span><span class="token operator">></span> <span class="token punctuation">[</span>
<span class="token string">'host'</span> <span class="token operator">=</span><span class="token operator">></span> <span class="token function">env<span class="token punctuation">(</span></span><span class="token string">'REDIS_HOST'</span><span class="token punctuation">,</span> <span class="token string">'localhost'</span><span class="token punctuation">)</span><span class="token punctuation">,</span>
<span class="token string">'password'</span> <span class="token operator">=</span><span class="token operator">></span> <span class="token function">env<span class="token punctuation">(</span></span><span class="token string">'REDIS_PASSWORD'</span><span class="token punctuation">,</span> <span class="token keyword">null</span><span class="token punctuation">)</span><span class="token punctuation">,</span>
<span class="token string">'port'</span> <span class="token operator">=</span><span class="token operator">></span> <span class="token function">env<span class="token punctuation">(</span></span><span class="token string">'REDIS_PORT'</span><span class="token punctuation">,</span> <span class="token number">6379</span><span class="token punctuation">)</span><span class="token punctuation">,</span>
<span class="token string">'database'</span> <span class="token operator">=</span><span class="token operator">></span> <span class="token number">0</span><span class="token punctuation">,</span>
<span class="token string">'read_write_timeout'</span> <span class="token operator">=</span><span class="token operator">></span> <span class="token number">60</span><span class="token punctuation">,</span>
<span class="token punctuation">]</span><span class="token punctuation">,</span></code></pre><p><a name="phpredis"></a></p><h3>PhpRedis</h3><blockquote class="has-icon note"><p><div class="flag"><span class="svg"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:a="http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/" version="1.1" x="0px" y="0px" width="90px" height="90px" viewBox="0 0 90 90" enable-background="new 0 0 90 90" xml:space="preserve"><path fill="#FFFFFF" d="M45 0C20.1 0 0 20.1 0 45s20.1 45 45 45 45-20.1 45-45S69.9 0 45 0zM45 74.5c-3.6 0-6.5-2.9-6.5-6.5s2.9-6.5 6.5-6.5 6.5 2.9 6.5 6.5S48.6 74.5 45 74.5zM52.1 23.9l-2.5 29.6c0 2.5-2.1 4.6-4.6 4.6 -2.5 0-4.6-2.1-4.6-4.6l-2.5-29.6c-0.1-0.4-0.1-0.7-0.1-1.1 0-4 3.2-7.2 7.2-7.2 4 0 7.2 3.2 7.2 7.2C52.2 23.1 52.2 23.5 52.1 23.9z"></path></svg></span></div> 如果你是通過 PECL 安裝 Redis PHP 擴展,則需要重命名 <code class=" language-php">config<span class="token operator">/</span>app<span class="token punctuation">.</span>php</code> 文件里的 Redis 別名。</p></blockquote><p>要使用 Phpredis 擴展,你需要將 <code class=" language-php">client</code> 選項配置為 <code class=" language-php">phpredis</code>。這個選項可以在 <code class=" language-php">config<span class="token operator">/</span>database<span class="token punctuation">.</span>php</code> 配置文件中找到:</p><pre class=" language-php"><code class=" language-php"><span class="token string">'redis'</span> <span class="token operator">=</span><span class="token operator">></span> <span class="token punctuation">[</span>
<span class="token string">'client'</span> <span class="token operator">=</span><span class="token operator">></span> <span class="token string">'phpredis'</span><span class="token punctuation">,</span>
<span class="token comment" spellcheck="true"> // Rest of Redis configuration...
</span><span class="token punctuation">]</span><span class="token punctuation">,</span></code></pre><p>除了默認的 <code class=" language-php">Host</code>,<code class=" language-php">port</code>,<code class=" language-php">database</code> 和 <code class=" language-php">password</code> 服務配置項之外,Phpredis 還支持下列額外連接配置:<code class=" language-php">persistent</code>,<code class=" language-php">prefix</code>,<code class=" language-php">read_timeout</code> 和 <code class=" language-php">timeout</code>。你可以將這些選項加到 <code class=" language-php">config<span class="token operator">/</span>database<span class="token punctuation">.</span>php</code> 配置文件中 redis 服務器配置項下:</p><pre class=" language-php"><code class=" language-php"><span class="token string">'default'</span> <span class="token operator">=</span><span class="token operator">></span> <span class="token punctuation">[</span>
<span class="token string">'host'</span> <span class="token operator">=</span><span class="token operator">></span> <span class="token function">env<span class="token punctuation">(</span></span><span class="token string">'REDIS_HOST'</span><span class="token punctuation">,</span> <span class="token string">'localhost'</span><span class="token punctuation">)</span><span class="token punctuation">,</span>
<span class="token string">'password'</span> <span class="token operator">=</span><span class="token operator">></span> <span class="token function">env<span class="token punctuation">(</span></span><span class="token string">'REDIS_PASSWORD'</span><span class="token punctuation">,</span> <span class="token keyword">null</span><span class="token punctuation">)</span><span class="token punctuation">,</span>
<span class="token string">'port'</span> <span class="token operator">=</span><span class="token operator">></span> <span class="token function">env<span class="token punctuation">(</span></span><span class="token string">'REDIS_PORT'</span><span class="token punctuation">,</span> <span class="token number">6379</span><span class="token punctuation">)</span><span class="token punctuation">,</span>
<span class="token string">'database'</span> <span class="token operator">=</span><span class="token operator">></span> <span class="token number">0</span><span class="token punctuation">,</span>
<span class="token string">'read_timeout'</span> <span class="token operator">=</span><span class="token operator">></span> <span class="token number">60</span><span class="token punctuation">,</span>
<span class="token punctuation">]</span><span class="token punctuation">,</span></code></pre><p><a name="interacting-with-redis"></a></p><h2><a href="#interacting-with-redis">基本用法</a></h2><p>你可以通過調用 <code class=" language-php">Redis</code> <a href="/docs/5.4/facades">facade</a> 的各種方法與 <code class=" language-php">Redis</code> 進行交互。<code class=" language-php">Redis</code> facade 支持動態方法,意思就是指你可以在該 facade 調用任何 <a href="http://redis.io/commands">Redis 命令</a>,該命令會直接傳遞給 Redis。在本例中,我們會通過 <code class=" language-php">Redis</code> facade 的 <code class=" language-php">get</code> 方法來調用 Redis 的 <code class=" language-php"><span class="token constant">GET</span></code> 命令:</p><pre class=" language-php"><code class=" language-php"><span class="token delimiter"><?php</span>
<span class="token keyword">namespace</span> <span class="token package">App<span class="token punctuation">\</span>Http<span class="token punctuation">\</span>Controllers</span><span class="token punctuation">;</span>
<span class="token keyword">use</span> <span class="token package">Illuminate<span class="token punctuation">\</span>Support<span class="token punctuation">\</span>Facades<span class="token punctuation">\</span>Redis</span><span class="token punctuation">;</span>
<span class="token keyword">use</span> <span class="token package">App<span class="token punctuation">\</span>Http<span class="token punctuation">\</span>Controllers<span class="token punctuation">\</span>Controller</span><span class="token punctuation">;</span>
<span class="token keyword">class</span> <span class="token class-name">UserController</span> <span class="token keyword">extends</span> <span class="token class-name">Controller</span>
<span class="token punctuation">{</span>
<span class="token comment" spellcheck="true">/**
* Show the profile for the given user.
*
* @param int $id
* @return Response
*/</span>
<span class="token keyword">public</span> <span class="token keyword">function</span> <span class="token function">showProfile<span class="token punctuation">(</span></span><span class="token variable">$id</span><span class="token punctuation">)</span>
<span class="token punctuation">{</span>
<span class="token variable">$user</span> <span class="token operator">=</span> <span class="token scope">Redis<span class="token punctuation">::</span></span><span class="token function">get<span class="token punctuation">(</span></span><span class="token string">'user:profile:'</span><span class="token punctuation">.</span><span class="token variable">$id</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token keyword">return</span> <span class="token function">view<span class="token punctuation">(</span></span><span class="token string">'user.profile'</span><span class="token punctuation">,</span> <span class="token punctuation">[</span><span class="token string">'user'</span> <span class="token operator">=</span><span class="token operator">></span> <span class="token variable">$user</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token punctuation">}</span></code></pre><p>如上所述,你可以在 <code class=" language-php">Redis</code> facade 調用任何的 Redis 命令。Laravel 使用魔術方法來傳遞命令至 Redis 服務器,所以可以簡單的傳遞 Redis 命令所需要的參數:</p><pre class=" language-php"><code class=" language-php"><span class="token scope">Redis<span class="token punctuation">::</span></span><span class="token function">set<span class="token punctuation">(</span></span><span class="token string">'name'</span><span class="token punctuation">,</span> <span class="token string">'Taylor'</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token variable">$values</span> <span class="token operator">=</span> <span class="token scope">Redis<span class="token punctuation">::</span></span><span class="token function">lrange<span class="token punctuation">(</span></span><span class="token string">'names'</span><span class="token punctuation">,</span> <span class="token number">5</span><span class="token punctuation">,</span> <span class="token number">10</span><span class="token punctuation">)</span><span class="token punctuation">;</span></code></pre><p>另外,你也可以通過 <code class=" language-php">command</code> 方法傳遞命令至服務器,它接收命令的名稱作為第一個參數,第二個參數則為值的數組:</p><pre class=" language-php"><code class=" language-php"><span class="token variable">$values</span> <span class="token operator">=</span> <span class="token scope">Redis<span class="token punctuation">::</span></span><span class="token function">command<span class="token punctuation">(</span></span><span class="token string">'lrange'</span><span class="token punctuation">,</span> <span class="token punctuation">[</span><span class="token string">'name'</span><span class="token punctuation">,</span> <span class="token number">5</span><span class="token punctuation">,</span> <span class="token number">10</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span></code></pre><h4>使用多個 Redis 連接</h4><p>你可以通過 <code class=" language-php"><span class="token scope">Redis<span class="token punctuation">::</span></span>connection</code> 方法來得到 Redis 實例:</p><pre class=" language-php"><code class=" language-php"><span class="token variable">$redis</span> <span class="token operator">=</span> <span class="token scope">Redis<span class="token punctuation">::</span></span><span class="token function">connection<span class="token punctuation">(</span></span><span class="token punctuation">)</span><span class="token punctuation">;</span></code></pre><p>這會返回配置項中的默認的 redis 服務器。你也可以傳遞連接或者集群的名字給 <code class=" language-php">connection</code> 方法,來獲取在 Redis 配置文件中配置的特定的服務器或者集群:</p><pre class=" language-php"><code class=" language-php"><span class="token variable">$redis</span> <span class="token operator">=</span> <span class="token scope">Redis<span class="token punctuation">::</span></span><span class="token function">connection<span class="token punctuation">(</span></span><span class="token string">'my-connection'</span><span class="token punctuation">)</span><span class="token punctuation">;</span></code></pre><p><a name="pipelining-commands"></a></p><h3>管道化命令</h3><p>當你想要在單次操作中發送多個命令至服務器時則可以使用管道化命令。 <code class=" language-php">pipeline</code> 方法接收一個參數:帶有 Redis 實例的 <code class=" language-php">閉包</code> 。你可以發送所有的命令至此 Redis 實例,它們都會在單次操作中運行:</p><pre class=" language-php"><code class=" language-php"><span class="token scope">Redis<span class="token punctuation">::</span></span><span class="token function">pipeline<span class="token punctuation">(</span></span><span class="token keyword">function</span> <span class="token punctuation">(</span><span class="token variable">$pipe</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
<span class="token keyword">for</span> <span class="token punctuation">(</span><span class="token variable">$i</span> <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">;</span> <span class="token variable">$i</span> <span class="token operator"><</span> <span class="token number">1000</span><span class="token punctuation">;</span> <span class="token variable">$i</span><span class="token operator">++</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
<span class="token variable">$pipe</span><span class="token operator">-</span><span class="token operator">></span><span class="token function">set<span class="token punctuation">(</span></span><span class="token string">"key:$i"</span><span class="token punctuation">,</span> <span class="token variable">$i</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span></code></pre><p><a name="pubsub"></a></p><h2><a href="#pubsub">發布與訂閱</a></h2><p>Laravel 也對 Redis 的 <code class=" language-php">publish</code> 及 <code class=" language-php">subscribe</code> 提供了方便的接口。這些 Redis 命令讓你可以監聽指定「頻道」的消息。你可以從另一個應用程序發布消息至頻道,甚至使用另一種編程語言,讓應用程序或進程之間容易溝通。</p><p>首先,讓我們通過 <code class=" language-php">Redis</code> 來使用 <code class=" language-php">subscribe</code> 方法在一個頻道設置偵聽器。我們會將方法調用放置于一個 <a href="/docs/5.4/artisan">Artisan 命令</a> 中,因為調用 <code class=" language-php">subscribe</code> 方法會啟動一個長時間運行的進程:</p><pre class=" language-php"><code class=" language-php"><span class="token delimiter"><?php</span>
<span class="token keyword">namespace</span> <span class="token package">App<span class="token punctuation">\</span>Console<span class="token punctuation">\</span>Commands</span><span class="token punctuation">;</span>
<span class="token keyword">use</span> <span class="token package">Illuminate<span class="token punctuation">\</span>Console<span class="token punctuation">\</span>Command</span><span class="token punctuation">;</span>
<span class="token keyword">use</span> <span class="token package">Illuminate<span class="token punctuation">\</span>Support<span class="token punctuation">\</span>Facades<span class="token punctuation">\</span>Redis</span><span class="token punctuation">;</span>
<span class="token keyword">class</span> <span class="token class-name">RedisSubscribe</span> <span class="token keyword">extends</span> <span class="token class-name">Command</span>
<span class="token punctuation">{</span>
<span class="token comment" spellcheck="true">/**
* The name and signature of the console command.
*
* @var string
*/</span>
<span class="token keyword">protected</span> <span class="token variable">$signature</span> <span class="token operator">=</span> <span class="token string">'redis:subscribe'</span><span class="token punctuation">;</span>
<span class="token comment" spellcheck="true">/**
* The console command description.
*
* @var string
*/</span>
<span class="token keyword">protected</span> <span class="token variable">$description</span> <span class="token operator">=</span> <span class="token string">'Subscribe to a Redis channel'</span><span class="token punctuation">;</span>
<span class="token comment" spellcheck="true">/**
* Execute the console command.
*
* @return mixed
*/</span>
<span class="token keyword">public</span> <span class="token keyword">function</span> <span class="token function">handle<span class="token punctuation">(</span></span><span class="token punctuation">)</span>
<span class="token punctuation">{</span>
<span class="token scope">Redis<span class="token punctuation">::</span></span><span class="token function">subscribe<span class="token punctuation">(</span></span><span class="token punctuation">[</span><span class="token string">'test-channel'</span><span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token keyword">function</span> <span class="token punctuation">(</span><span class="token variable">$message</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
<span class="token keyword">echo</span> <span class="token variable">$message</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token punctuation">}</span></code></pre><p>現在,我們可以通過 <code class=" language-php">publish</code> 方法發布消息至該頻道:</p><pre class=" language-php"><code class=" language-php"><span class="token scope">Route<span class="token punctuation">::</span></span><span class="token function">get<span class="token punctuation">(</span></span><span class="token string">'publish'</span><span class="token punctuation">,</span> <span class="token keyword">function</span> <span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
<span class="token comment" spellcheck="true"> // Route logic...
</span>
<span class="token scope">Redis<span class="token punctuation">::</span></span><span class="token function">publish<span class="token punctuation">(</span></span><span class="token string">'test-channel'</span><span class="token punctuation">,</span> <span class="token function">json_encode<span class="token punctuation">(</span></span><span class="token punctuation">[</span><span class="token string">'foo'</span> <span class="token operator">=</span><span class="token operator">></span> <span class="token string">'bar'</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span></code></pre><h4>通配符訂閱</h4><p>你可以使用 <code class=" language-php">psubscribe</code> 方法訂閱一個通配符頻道,這在對所有頻道獲取所有消息時相當有用。 <code class=" language-php"><span class="token variable">$channel</span></code> 名稱會被傳遞至該方法提供的回調 <code class=" language-php">閉包</code> 的第二個參數:</p><pre class=" language-php"><code class=" language-php"><span class="token scope">Redis<span class="token punctuation">::</span></span><span class="token function">psubscribe<span class="token punctuation">(</span></span><span class="token punctuation">[</span><span class="token string">'*'</span><span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token keyword">function</span> <span class="token punctuation">(</span><span class="token variable">$message</span><span class="token punctuation">,</span> <span class="token variable">$channel</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
<span class="token keyword">echo</span> <span class="token variable">$message</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token scope">Redis<span class="token punctuation">::</span></span><span class="token function">psubscribe<span class="token punctuation">(</span></span><span class="token punctuation">[</span><span class="token string">'users.*'</span><span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token keyword">function</span> <span class="token punctuation">(</span><span class="token variable">$message</span><span class="token punctuation">,</span> <span class="token variable">$channel</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
<span class="token keyword">echo</span> <span class="token variable">$message</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span></code></pre><h2>譯者署名</h2><table><thead><tr><th>用戶名</th><th>頭像</th><th>職能</th><th>簽名</th></tr></thead><tbody><tr><td><a href="https://github.com/daydaygo">@daydaygo</a></td><td><img class="avatar-66 rm-style" src="http://qiniu.daydaygo.top/lol-timo-panda.png"></td><td>翻譯</td><td><a href="http://blog.daydaygo.top">Coder at Work</a></td></tr></tbody></table></article>
- 入門指南
- 安裝
- 配置信息
- 文件夾結構
- 請求周期
- 開發環境部署
- Valet
- Homestead
- 核心概念
- 服務提供者
- Facades
- Contracts
- 服務容器
- HTTP 層
- 路由
- 中間件
- CSRF 保護
- 控制器
- 請求
- 響應
- 視圖
- Session
- 表單驗證
- 前端
- Blade 模板
- 本地化
- 前端指南
- 編輯資源 Mix
- 安全
- API 認證
- 用戶認證
- 用戶授權
- 加密解密
- 哈希
- 重置密碼
- 數據庫
- 快速入門
- 查詢構造器
- 分頁
- 數據庫遷移
- Redis
- 數據填充
- Eloquent ORM
- Eloquent ORM快速入門
- 模型關聯
- Eloquent 集合
- 修改器
- 序列化
- 綜合話題
- Artisan 命令行
- 廣播系統
- 緩存系統
- 集合
- 錯誤與日志
- 事件系統
- 文件存儲
- 輔助函數
- 郵件發送
- 消息通知
- 擴展包開發
- 隊列
- 任務調度