php使用redis最常用示例
<div class="postTitle">php使用redis的几种常见方式和用法</div><div id="cnblogs_post_body" class="blogpost-body">
<p>一、简单的字符串缓存</p>
<p>比如针对一些sql查询较慢,更新不频繁的数据进行缓存。</p>
<div class="cnblogs_Highlighter sh-gutter">
<div id="highlighter_528466" class="syntaxhighlighterphp">
<table style="height: 247px; width: 1745px" border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">1</div>
<div class="line number2 index1 alt1">2</div>
<div class="line number3 index2 alt2">3</div>
<div class="line number4 index3 alt1">4</div>
<div class="line number5 index4 alt2">5</div>
<div class="line number6 index5 alt1">6</div>
<div class="line number7 index6 alt2">7</div>
<div class="line number8 index7 alt1">8</div>
<div class="line number9 index8 alt2">9</div>
<div class="line number10 index9 alt1">10</div>
<div class="line number11 index10 alt2">11</div>
<div class="line number12 index11 alt1">12</div>
<div class="line number13 index12 alt2">13</div>
<div class="line number14 index13 alt1">14</div>
<div class="line number15 index14 alt2">15</div>
<div class="line number16 index15 alt1">16</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="php plain"><?php</code></div>
<div class="line number2 index1 alt1"> </div>
<div class="line number3 index2 alt2"><code class="php variable">$redis</code> <code class="php plain">= </code><code class="php keyword">new</code> <code class="php plain">Redis();</code></div>
<div class="line number4 index3 alt1"><code class="php variable">$redis</code><code class="php plain">->connect(</code><code class="php string">'127.0.0.1'</code><code class="php plain">, 6379, 60);</code></div>
<div class="line number5 index4 alt2"> </div>
<div class="line number6 index5 alt1"><code class="php variable">$sql</code> <code class="php plain">= </code><code class="php string">'select * from tb_order order by id desc limit 10'</code><code class="php plain">;</code></div>
<div class="line number7 index6 alt2"><code class="php comments">//伪代码,从数据库中获取数据</code></div>
<div class="line number8 index7 alt1"><code class="php variable">$data</code> <code class="php plain">= </code><code class="php variable">$db</code><code class="php plain">->query(</code><code class="php variable">$sql</code><code class="php plain">);</code></div>
<div class="line number9 index8 alt2"><code class="php variable">$data</code> <code class="php plain">= json_encode(</code><code class="php variable">$data</code><code class="php plain">, JSON_UNESCAPED_UNICODE);</code></div>
<div class="line number10 index9 alt1"><code class="php variable">$key</code> <code class="php plain">= md5(</code><code class="php variable">$sql</code><code class="php plain">);</code></div>
<div class="line number11 index10 alt2"><code class="php comments">//缓存数据</code></div>
<div class="line number12 index11 alt1"><code class="php variable">$redis</code><code class="php plain">->set(</code><code class="php variable">$key</code><code class="php plain">, </code><code class="php variable">$value</code><code class="php plain">, 60);</code></div>
<div class="line number13 index12 alt2"> </div>
<div class="line number14 index13 alt1"><code class="php comments">//获取数据</code></div>
<div class="line number15 index14 alt2"><code class="php variable">$data</code> <code class="php plain">= </code><code class="php variable">$redis</code><code class="php plain">->get(</code><code class="php variable">$key</code><code class="php plain">);</code></div>
<div class="line number16 index15 alt1"><code class="php plain">print_r(json_decode(</code><code class="php variable">$data</code><code class="php plain">, true));</code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<p> </p>
<p>二、通过列表模拟简单队列</p>
<p>比如我们需要批量的发送邮件,可以把发送邮件的任务存入队列中,然后启多个php脚本从队列中读取任务去发送邮件。</p>
<p>也可以用来处理商品秒杀,用户点击抢购时,把一个个的用户抢购任务放入队列中,串行化处理,判断队列数量,防止超卖的发生。</p>
<div class="cnblogs_Highlighter sh-gutter">
<div id="highlighter_19828" class="syntaxhighlighterphp">
<table style="height: 412px; width: 1745px" border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">1</div>
<div class="line number2 index1 alt1">2</div>
<div class="line number3 index2 alt2">3</div>
<div class="line number4 index3 alt1">4</div>
<div class="line number5 index4 alt2">5</div>
<div class="line number6 index5 alt1">6</div>
<div class="line number7 index6 alt2">7</div>
<div class="line number8 index7 alt1">8</div>
<div class="line number9 index8 alt2">9</div>
<div class="line number10 index9 alt1">10</div>
<div class="line number11 index10 alt2">11</div>
<div class="line number12 index11 alt1">12</div>
<div class="line number13 index12 alt2">13</div>
<div class="line number14 index13 alt1">14</div>
<div class="line number15 index14 alt2">15</div>
<div class="line number16 index15 alt1">16</div>
<div class="line number17 index16 alt2">17</div>
<div class="line number18 index17 alt1">18</div>
<div class="line number19 index18 alt2">19</div>
<div class="line number20 index19 alt1">20</div>
<div class="line number21 index20 alt2">21</div>
<div class="line number22 index21 alt1">22</div>
<div class="line number23 index22 alt2">23</div>
<div class="line number24 index23 alt1">24</div>
<div class="line number25 index24 alt2">25</div>
<div class="line number26 index25 alt1">26</div>
<div class="line number27 index26 alt2">27</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="php plain"><?php</code></div>
<div class="line number2 index1 alt1"> </div>
<div class="line number3 index2 alt2"><code class="php variable">$redis</code> <code class="php plain">= </code><code class="php keyword">new</code> <code class="php plain">Redis();</code></div>
<div class="line number4 index3 alt1"><code class="php variable">$redis</code><code class="php plain">->connect(</code><code class="php string">'127.0.0.1'</code><code class="php plain">, 6379, 60);</code></div>
<div class="line number5 index4 alt2"> </div>
<div class="line number6 index5 alt1"><code class="php comments">//循环的把发送1000条邮件任务插入队列</code></div>
<div class="line number7 index6 alt2"><code class="php keyword">for</code> <code class="php plain">(</code><code class="php variable">$ix</code> <code class="php plain">= 0; </code><code class="php variable">$ix</code> <code class="php plain">< 1000; </code><code class="php variable">$ix</code><code class="php plain">++) {</code></div>
<div class="line number8 index7 alt1"><code class="php spaces"> </code><code class="php variable">$redis</code><code class="php plain">->lPush(</code><code class="php string">'send_email_queue'</code><code class="php plain">, json_encode([</code></div>
<div class="line number9 index8 alt2"><code class="php spaces"> </code><code class="php string">'id'</code> <code class="php plain">=> </code><code class="php variable">$ix</code><code class="php plain">,</code></div>
<div class="line number10 index9 alt1"><code class="php spaces"> </code><code class="php string">'send'</code> <code class="php plain">=> </code><code class="php string">'xxx@qq.com'</code><code class="php plain">,</code></div>
<div class="line number11 index10 alt2"><code class="php spaces"> </code><code class="php string">'receive'</code> <code class="php plain">=> </code><code class="php string">'yyy@qq.com'</code><code class="php plain">,</code></div>
<div class="line number12 index11 alt1"><code class="php spaces"> </code><code class="php string">'title'</code> <code class="php plain">=> </code><code class="php string">'xxx'</code><code class="php plain">,</code></div>
<div class="line number13 index12 alt2"><code class="php spaces"> </code><code class="php string">'body'</code> <code class="php plain">=> </code><code class="php string">'xxx'</code><code class="php plain">,</code></div>
<div class="line number14 index13 alt1"><code class="php spaces"> </code><code class="php plain">]));</code></div>
<div class="line number15 index14 alt2"><code class="php plain">}</code></div>
<div class="line number16 index15 alt1"> </div>
<div class="line number17 index16 alt2"><code class="php plain">sleep(3);</code></div>
<div class="line number18 index17 alt1"> </div>
<div class="line number19 index18 alt2"><code class="php comments">//从队列中取任务,执行任务</code></div>
<div class="line number20 index19 alt1"><code class="php keyword">while</code> <code class="php plain">(</code><code class="php variable">$count</code> <code class="php plain">= </code><code class="php variable">$redis</code><code class="php plain">->lLen(</code><code class="php string">'send_email_queue'</code><code class="php plain">)) {</code></div>
<div class="line number21 index20 alt2"><code class="php spaces"> </code><code class="php functions">echo</code> <code class="php string">"当前任务队列数 {$count} <br>"</code><code class="php plain">;</code></div>
<div class="line number22 index21 alt1"><code class="php spaces"> </code><code class="php variable">$task</code> <code class="php plain">= </code><code class="php variable">$redis</code><code class="php plain">->rpop(</code><code class="php string">'send_email_queue'</code><code class="php plain">);</code></div>
<div class="line number23 index22 alt2"><code class="php spaces"> </code><code class="php variable">$task</code> <code class="php plain">= json_decode(</code><code class="php variable">$task</code><code class="php plain">, true);</code></div>
<div class="line number24 index23 alt1"><code class="php spaces"> </code><code class="php comments">//伪代码,发送邮件</code></div>
<div class="line number25 index24 alt2"><code class="php spaces"> </code><code class="php variable">$mailer</code><code class="php plain">->send(</code><code class="php variable">$task</code><code class="php plain">[</code><code class="php string">'send'</code><code class="php plain">], </code><code class="php variable">$task</code><code class="php plain">[</code><code class="php string">'receive'</code><code class="php plain">], </code><code class="php variable">$task</code><code class="php plain">[</code><code class="php string">'title'</code><code class="php plain">], </code><code class="php variable">$task</code><code class="php plain">[</code><code class="php string">'body'</code><code class="php plain">]);</code></div>
<div class="line number26 index25 alt1"><code class="php spaces"> </code><code class="php functions">echo</code> <code class="php string">"任务 {$task['id']} 邮件发送成功<br>"</code><code class="php plain">;</code></div>
<div class="line number27 index26 alt2"><code class="php plain">}</code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<p> </p>
<p>三、通过watch + multi 来实现乐观锁</p>
<p>乐观锁,顾名思义,乐观的认为数据不会被修改,只有当更新时才去判断数据是否被修改过,通常用版本号或时间戳来实现。</p>
<p>redis中通过watch和multi来实现,watch会监视给定的key是否发生更改,当exec的时候如果监视的key发生过改变,则整个事务会失败。</p>
<p>当然我们可以调用多次watch监视多个key。</p>
<div class="cnblogs_Highlighter sh-gutter">
<div id="highlighter_713399" class="syntaxhighlighterphp">
<table style="height: 337px; width: 1661px" border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">1</div>
<div class="line number2 index1 alt1">2</div>
<div class="line number3 index2 alt2">3</div>
<div class="line number4 index3 alt1">4</div>
<div class="line number5 index4 alt2">5</div>
<div class="line number6 index5 alt1">6</div>
<div class="line number7 index6 alt2">7</div>
<div class="line number8 index7 alt1">8</div>
<div class="line number9 index8 alt2">9</div>
<div class="line number10 index9 alt1">10</div>
<div class="line number11 index10 alt2">11</div>
<div class="line number12 index11 alt1">12</div>
<div class="line number13 index12 alt2">13</div>
<div class="line number14 index13 alt1">14</div>
<div class="line number15 index14 alt2">15</div>
<div class="line number16 index15 alt1">16</div>
<div class="line number17 index16 alt2">17</div>
<div class="line number18 index17 alt1">18</div>
<div class="line number19 index18 alt2">19</div>
<div class="line number20 index19 alt1">20</div>
<div class="line number21 index20 alt2">21</div>
<div class="line number22 index21 alt1">22</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="php plain"><?php</code></div>
<div class="line number2 index1 alt1"> </div>
<div class="line number3 index2 alt2"><code class="php variable">$redis</code> <code class="php plain">= </code><code class="php keyword">new</code> <code class="php plain">Redis();</code></div>
<div class="line number4 index3 alt1"><code class="php variable">$redis</code><code class="php plain">->connect(</code><code class="php string">'127.0.0.1'</code><code class="php plain">, 6379, 60);</code></div>
<div class="line number5 index4 alt2"> </div>
<div class="line number6 index5 alt1"><code class="php comments">//设置商品的库存数为100</code></div>
<div class="line number7 index6 alt2"><code class="php variable">$redis</code><code class="php plain">->set(</code><code class="php string">'goods_stock_nums'</code><code class="php plain">, 100);</code></div>
<div class="line number8 index7 alt1"><code class="php comments">//监视该key</code></div>
<div class="line number9 index8 alt2"><code class="php variable">$redis</code><code class="php plain">->watch(</code><code class="php string">'goods_stock_nums'</code><code class="php plain">);</code></div>
<div class="line number10 index9 alt1"> </div>
<div class="line number11 index10 alt2"><code class="php comments">//开启事务</code></div>
<div class="line number12 index11 alt1"><code class="php variable">$redis</code><code class="php plain">->multi();</code></div>
<div class="line number13 index12 alt2"> </div>
<div class="line number14 index13 alt1"><code class="php comments">//修改库存数</code></div>
<div class="line number15 index14 alt2"><code class="php variable">$redis</code><code class="php plain">->decr(</code><code class="php string">'goods_stock_nums'</code><code class="php plain">);</code></div>
<div class="line number16 index15 alt1"> </div>
<div class="line number17 index16 alt2"><code class="php comments">//提交事务,如果在此期间有其他请求修改了该key,那么事务会失败</code></div>
<div class="line number18 index17 alt1"><code class="php keyword">if</code> <code class="php plain">(</code><code class="php variable">$redis</code><code class="php plain">-></code><code class="php functions">exec</code><code class="php plain">()) {</code></div>
<div class="line number19 index18 alt2"><code class="php spaces"> </code><code class="php functions">echo</code> <code class="php string">'抢购成功'</code><code class="php plain">;</code></div>
<div class="line number20 index19 alt1"><code class="php plain">} </code><code class="php keyword">else</code> <code class="php plain">{</code></div>
<div class="line number21 index20 alt2"><code class="php spaces"> </code><code class="php functions">echo</code> <code class="php string">'数据错误,请重新再试'</code><code class="php plain">;</code></div>
<div class="line number22 index21 alt1"><code class="php plain">}</code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<p> </p>
<p>四、使用 set 来实现悲观锁</p>
<p>悲观锁,顾名思义,悲观的认为数据总是会被修改,所以在操作前都会先加上锁,操作完后,再释放锁。</p>
<div class="cnblogs_Highlighter sh-gutter">
<div id="highlighter_350192" class="syntaxhighlighterphp">
<table style="height: 817px; width: 1553px" border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">1</div>
<div class="line number2 index1 alt1">2</div>
<div class="line number3 index2 alt2">3</div>
<div class="line number4 index3 alt1">4</div>
<div class="line number5 index4 alt2">5</div>
<div class="line number6 index5 alt1">6</div>
<div class="line number7 index6 alt2">7</div>
<div class="line number8 index7 alt1">8</div>
<div class="line number9 index8 alt2">9</div>
<div class="line number10 index9 alt1">10</div>
<div class="line number11 index10 alt2">11</div>
<div class="line number12 index11 alt1">12</div>
<div class="line number13 index12 alt2">13</div>
<div class="line number14 index13 alt1">14</div>
<div class="line number15 index14 alt2">15</div>
<div class="line number16 index15 alt1">16</div>
<div class="line number17 index16 alt2">17</div>
<div class="line number18 index17 alt1">18</div>
<div class="line number19 index18 alt2">19</div>
<div class="line number20 index19 alt1">20</div>
<div class="line number21 index20 alt2">21</div>
<div class="line number22 index21 alt1">22</div>
<div class="line number23 index22 alt2">23</div>
<div class="line number24 index23 alt1">24</div>
<div class="line number25 index24 alt2">25</div>
<div class="line number26 index25 alt1">26</div>
<div class="line number27 index26 alt2">27</div>
<div class="line number28 index27 alt1">28</div>
<div class="line number29 index28 alt2">29</div>
<div class="line number30 index29 alt1">30</div>
<div class="line number31 index30 alt2">31</div>
<div class="line number32 index31 alt1">32</div>
<div class="line number33 index32 alt2">33</div>
<div class="line number34 index33 alt1">34</div>
<div class="line number35 index34 alt2">35</div>
<div class="line number36 index35 alt1">36</div>
<div class="line number37 index36 alt2">37</div>
<div class="line number38 index37 alt1">38</div>
<div class="line number39 index38 alt2">39</div>
<div class="line number40 index39 alt1">40</div>
<div class="line number41 index40 alt2">41</div>
<div class="line number42 index41 alt1">42</div>
<div class="line number43 index42 alt2">43</div>
<div class="line number44 index43 alt1">44</div>
<div class="line number45 index44 alt2">45</div>
<div class="line number46 index45 alt1">46</div>
<div class="line number47 index46 alt2">47</div>
<div class="line number48 index47 alt1">48</div>
<div class="line number49 index48 alt2">49</div>
<div class="line number50 index49 alt1">50</div>
<div class="line number51 index50 alt2">51</div>
<div class="line number52 index51 alt1">52</div>
<div class="line number53 index52 alt2">53</div>
<div class="line number54 index53 alt1">54</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="php plain"><?php</code></div>
<div class="line number2 index1 alt1"> </div>
<div class="line number3 index2 alt2"><code class="php keyword">function</code> <code class="php plain">getRedis()</code></div>
<div class="line number4 index3 alt1"><code class="php plain">{</code></div>
<div class="line number5 index4 alt2"><code class="php spaces"> </code><code class="php variable">$redis</code> <code class="php plain">= </code><code class="php keyword">new</code> <code class="php plain">Redis();</code></div>
<div class="line number6 index5 alt1"><code class="php spaces"> </code><code class="php variable">$redis</code><code class="php plain">->connect(</code><code class="php string">'127.0.0.1'</code><code class="php plain">, 6379, 60);</code></div>
<div class="line number7 index6 alt2"><code class="php spaces"> </code><code class="php keyword">return</code> <code class="php variable">$redis</code><code class="php plain">;</code></div>
<div class="line number8 index7 alt1"><code class="php plain">}</code></div>
<div class="line number9 index8 alt2"> </div>
<div class="line number10 index9 alt1"><code class="php keyword">function</code> <code class="php plain">lock(</code><code class="php variable">$key</code><code class="php plain">, </code><code class="php variable">$random</code><code class="php plain">)</code></div>
<div class="line number11 index10 alt2"><code class="php plain">{</code></div>
<div class="line number12 index11 alt1"><code class="php spaces"> </code><code class="php variable">$redis</code> <code class="php plain">= getRedis();</code></div>
<div class="line number13 index12 alt2"><code class="php spaces"> </code><code class="php keyword">return</code> <code class="php variable">$redis</code><code class="php plain">->set(</code><code class="php variable">$key</code><code class="php plain">, </code><code class="php variable">$random</code><code class="php plain">, [</code><code class="php string">'nx'</code><code class="php plain">, </code><code class="php string">'ex'</code> <code class="php plain">=> 3]);</code></div>
<div class="line number14 index13 alt1"><code class="php plain">}</code></div>
<div class="line number15 index14 alt2"> </div>
<div class="line number16 index15 alt1"><code class="php keyword">function</code> <code class="php plain">unlock(</code><code class="php variable">$key</code><code class="php plain">, </code><code class="php variable">$random</code><code class="php plain">)</code></div>
<div class="line number17 index16 alt2"><code class="php plain">{</code></div>
<div class="line number18 index17 alt1"><code class="php spaces"> </code><code class="php variable">$redis</code> <code class="php plain">= getRedis();</code></div>
<div class="line number19 index18 alt2"><code class="php spaces"> </code><code class="php comments">//使用lua脚本保证原子性</code></div>
<div class="line number20 index19 alt1"><code class="php spaces"> </code><code class="php variable">$script</code> <code class="php plain">= </code><code class="php string">'if redis.call("get",KEYS) == ARGV then return redis.call("del",KEYS) else return 0 end'</code><code class="php plain">;</code></div>
<div class="line number21 index20 alt2"><code class="php spaces"> </code><code class="php keyword">return</code> <code class="php variable">$redis</code><code class="php plain">-></code><code class="php functions">eval</code><code class="php plain">(</code><code class="php variable">$script</code><code class="php plain">, [</code><code class="php variable">$key</code><code class="php plain">, </code><code class="php variable">$random</code><code class="php plain">], 1);</code></div>
<div class="line number22 index21 alt1"><code class="php plain">}</code></div>
<div class="line number23 index22 alt2"> </div>
<div class="line number24 index23 alt1"><code class="php keyword">function</code> <code class="php plain">decrGoodsStockNums()</code></div>
<div class="line number25 index24 alt2"><code class="php plain">{</code></div>
<div class="line number26 index25 alt1"><code class="php spaces"> </code><code class="php variable">$redis</code> <code class="php plain">= getRedis();</code></div>
<div class="line number27 index26 alt2"> </div>
<div class="line number28 index27 alt1"><code class="php spaces"> </code><code class="php comments">//获取商品库存数</code></div>
<div class="line number29 index28 alt2"><code class="php spaces"> </code><code class="php variable">$ret</code> <code class="php plain">= </code><code class="php variable">$redis</code><code class="php plain">->get(</code><code class="php string">'goods_stock_nums'</code><code class="php plain">);</code></div>
<div class="line number30 index29 alt1"> </div>
<div class="line number31 index30 alt2"><code class="php spaces"> </code><code class="php keyword">if</code> <code class="php plain">(</code><code class="php variable">$ret</code> <code class="php plain">=== false) {</code></div>
<div class="line number32 index31 alt1"><code class="php spaces"> </code><code class="php keyword">return</code> <code class="php plain">false;</code></div>
<div class="line number33 index32 alt2"><code class="php spaces"> </code><code class="php plain">}</code></div>
<div class="line number34 index33 alt1"> </div>
<div class="line number35 index34 alt2"><code class="php spaces"> </code><code class="php keyword">if</code> <code class="php plain">(</code><code class="php variable">$ret</code> <code class="php plain"><= 0) {</code></div>
<div class="line number36 index35 alt1"><code class="php spaces"> </code><code class="php keyword">return</code> <code class="php plain">false;</code></div>
<div class="line number37 index36 alt2"><code class="php spaces"> </code><code class="php plain">}</code></div>
<div class="line number38 index37 alt1"> </div>
<div class="line number39 index38 alt2"><code class="php spaces"> </code><code class="php variable">$random</code> <code class="php plain">= mt_rand();</code></div>
<div class="line number40 index39 alt1"><code class="php spaces"> </code><code class="php comments">//先获取锁</code></div>
<div class="line number41 index40 alt2"><code class="php spaces"> </code><code class="php keyword">if</code> <code class="php plain">(lock(</code><code class="php string">'goods_stock_nums_lock'</code><code class="php plain">, </code><code class="php variable">$random</code><code class="php plain">)) {</code></div>
<div class="line number42 index41 alt1"><code class="php spaces"> </code><code class="php comments">//修改库存数</code></div>
<div class="line number43 index42 alt2"><code class="php spaces"> </code><code class="php variable">$redis</code><code class="php plain">->decr(</code><code class="php string">'goods_stock_nums'</code><code class="php plain">);</code></div>
<div class="line number44 index43 alt1"> </div>
<div class="line number45 index44 alt2"><code class="php spaces"> </code><code class="php comments">//释放锁</code></div>
<div class="line number46 index45 alt1"><code class="php spaces"> </code><code class="php plain">unlock(</code><code class="php string">'goods_stock_nums_lock'</code><code class="php plain">, </code><code class="php variable">$random</code><code class="php plain">);</code></div>
<div class="line number47 index46 alt2"><code class="php spaces"> </code><code class="php keyword">return</code> <code class="php plain">true;</code></div>
<div class="line number48 index47 alt1"><code class="php spaces"> </code><code class="php plain">} </code><code class="php keyword">else</code> <code class="php plain">{</code></div>
<div class="line number49 index48 alt2"><code class="php spaces"> </code><code class="php plain">usleep(100);</code></div>
<div class="line number50 index49 alt1"><code class="php spaces"> </code><code class="php plain">decrGoodsStockNums();</code></div>
<div class="line number51 index50 alt2"><code class="php spaces"> </code><code class="php plain">}</code></div>
<div class="line number52 index51 alt1"><code class="php plain">}</code></div>
<div class="line number53 index52 alt2"> </div>
<div class="line number54 index53 alt1"><code class="php plain">decrGoodsStockNums();</code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<p> </p>
<p>五、使用 publish + subscribe 完成发布和订阅</p>
<p>发布代码:</p>
<div class="cnblogs_Highlighter sh-gutter">
<div id="highlighter_188442" class="syntaxhighlighterphp">
<table style="height: 247px; width: 1584px" border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">1</div>
<div class="line number2 index1 alt1">2</div>
<div class="line number3 index2 alt2">3</div>
<div class="line number4 index3 alt1">4</div>
<div class="line number5 index4 alt2">5</div>
<div class="line number6 index5 alt1">6</div>
<div class="line number7 index6 alt2">7</div>
<div class="line number8 index7 alt1">8</div>
<div class="line number9 index8 alt2">9</div>
<div class="line number10 index9 alt1">10</div>
<div class="line number11 index10 alt2">11</div>
<div class="line number12 index11 alt1">12</div>
<div class="line number13 index12 alt2">13</div>
<div class="line number14 index13 alt1">14</div>
<div class="line number15 index14 alt2">15</div>
<div class="line number16 index15 alt1">16</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="php plain"><?php</code></div>
<div class="line number2 index1 alt1"> </div>
<div class="line number3 index2 alt2"><code class="php variable">$redis</code> <code class="php plain">= </code><code class="php keyword">new</code> <code class="php plain">Redis();</code></div>
<div class="line number4 index3 alt1"><code class="php variable">$redis</code><code class="php plain">->pconnect(</code><code class="php string">'127.0.0.1'</code><code class="php plain">, 6379);</code></div>
<div class="line number5 index4 alt2"> </div>
<div class="line number6 index5 alt1"><code class="php variable">$ix</code> <code class="php plain">= 0;</code></div>
<div class="line number7 index6 alt2"><code class="php comments">//发布内容</code></div>
<div class="line number8 index7 alt1"><code class="php keyword">while</code> <code class="php plain">(true) {</code></div>
<div class="line number9 index8 alt2"><code class="php spaces"> </code><code class="php variable">$redis</code><code class="php plain">->publish(</code><code class="php string">'news'</code><code class="php plain">, json_encode([</code></div>
<div class="line number10 index9 alt1"><code class="php spaces"> </code><code class="php string">'title'</code> <code class="php plain">=> </code><code class="php string">'我是新闻标题'</code> <code class="php plain">. </code><code class="php variable">$ix</code><code class="php plain">,</code></div>
<div class="line number11 index10 alt2"><code class="php spaces"> </code><code class="php string">'content'</code> <code class="php plain">=> </code><code class="php string">'我是新闻内容'</code> <code class="php plain">. </code><code class="php variable">$ix</code><code class="php plain">,</code></div>
<div class="line number12 index11 alt1"><code class="php spaces"> </code><code class="php string">'time'</code> <code class="php plain">=> </code><code class="php functions">date</code><code class="php plain">(</code><code class="php string">'Y-m-d H:i:s'</code><code class="php plain">),</code></div>
<div class="line number13 index12 alt2"><code class="php spaces"> </code><code class="php plain">]));</code></div>
<div class="line number14 index13 alt1"><code class="php spaces"> </code><code class="php variable">$ix</code><code class="php plain">++;</code></div>
<div class="line number15 index14 alt2"><code class="php spaces"> </code><code class="php plain">sleep(1);</code></div>
<div class="line number16 index15 alt1"><code class="php plain">}</code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<p>订阅代码:</p>
<div class="cnblogs_Highlighter sh-gutter">
<div id="highlighter_440911" class="syntaxhighlighterphp">
<table style="height: 157px; width: 1594px" border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">1</div>
<div class="line number2 index1 alt1">2</div>
<div class="line number3 index2 alt2">3</div>
<div class="line number4 index3 alt1">4</div>
<div class="line number5 index4 alt2">5</div>
<div class="line number6 index5 alt1">6</div>
<div class="line number7 index6 alt2">7</div>
<div class="line number8 index7 alt1">8</div>
<div class="line number9 index8 alt2">9</div>
<div class="line number10 index9 alt1">10</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="php plain"><?php</code></div>
<div class="line number2 index1 alt1"> </div>
<div class="line number3 index2 alt2"><code class="php variable">$redis</code> <code class="php plain">= </code><code class="php keyword">new</code> <code class="php plain">Redis();</code></div>
<div class="line number4 index3 alt1"><code class="php variable">$redis</code><code class="php plain">->pconnect(</code><code class="php string">'127.0.0.1'</code><code class="php plain">, 6379);</code></div>
<div class="line number5 index4 alt2"> </div>
<div class="line number6 index5 alt1"><code class="php comments">//订阅内容</code></div>
<div class="line number7 index6 alt2"><code class="php variable">$redis</code><code class="php plain">->subscribe([</code><code class="php string">'news'</code><code class="php plain">], </code><code class="php keyword">function</code> <code class="php plain">(</code><code class="php variable">$redis</code><code class="php plain">, </code><code class="php variable">$channel</code><code class="php plain">, </code><code class="php variable">$msg</code><code class="php plain">) {</code></div>
<div class="line number8 index7 alt1"><code class="php spaces"> </code><code class="php variable">$msg</code> <code class="php plain">= json_decode(</code><code class="php variable">$msg</code><code class="php plain">, true);</code></div>
<div class="line number9 index8 alt2"><code class="php spaces"> </code><code class="php functions">echo</code> <code class="php string">"标题: {$msg['title']} 内容: {$msg['content']} 时间: {$msg['time']} <br>"</code><code class="php plain">;</code></div>
<div class="line number10 index9 alt1"><code class="php plain">});</code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div><br><br>
来源:https://www.cnblogs.com/wzg-bky/p/11357225.html
頁:
[1]