Redis字符串類型的幾種應用

redis字符串數據類型,是最簡單的一種數據類型,但它也是學好其他redis的數據類型的基礎。下面介紹幾種redis的應用。

限流

使用redis可以做到限流的作用。redis本身性能極高,可以用它來抵擋部分請求。

防御大流量

現在網站攻擊日漸猖獗,靜態的資源可以用cdn,但動態的程序如何防御。下面,展示一個redis來防御大量請求的解決方案。

基本思路是限制一個ip一定時間內請求數,比如一個ip一秒的請求數不能超過10次。

偽代碼如下:

function?ip_limit($cnt?=?10) { ????$ip?=?$_SERVER['SERVER_ADDR']; ????$key?=?"limit:$ip:cnt"; ????$isExisit?=?$redis-&gt;set($key,?1,?['nx',?'ex'=&gt;1]); ???? ????if?(!$isExisit?||?$redis-&gt;incr($key)?<p><strong><span style="font-size: 20px;">獲取驗證碼頻率限制</span></strong></p><p>短信驗證碼現在已經成為了web應用的標配的,許多的地方都會需要短信驗證碼。如:注冊時、修改密碼時、一些對安全要求比較高的操作。當然,驗證碼獲取不是免費的,所以,我們不希望用戶無限制的獲取驗證碼。</p><p>也是相同的思路,我們可以寫一個獲取短信驗證碼頻率的限制應用。</p><p>完成一個一分鐘內,只準獲取一次驗證碼的應用,偽代碼如下:</p><pre class="brush:php;toolbar:false">function?code_limit($mobile,?$time?=?60) { ????$key?=?"limit:$mobile:cnt"; ????$isExisit?=?$redis-&gt;set($key,?1,?['nx',?'ex'=&gt;$time]); ???? ????if?(!$isExisit)?{ ????????//?通過 ????????return?true; ????}?else?{ ????????//?不通過 ????????return?false; ????} }

存放Session

使用redis存放session,是現在推薦的方式,他的好處是性能高,到期自動銷魂。(PHP自身的session垃圾回收機制不是可靠的,過期銷魂是有概率的)。

該方式非常簡單,只需在修改php.ini文件即可。

找到session.save_handler這行,修改為

session.save_handler?=?redis

將session.save_path修改為

session.save_path?=?"tcp://localhost:6379"

如何redis設置了密碼的話,只需修改為

session.save_path?=?"tcp://localhost:6379?auth=password"

如果不是單機應用,而是分布式的話,怎么樣使用redis來集中管理session呢?

也很簡單。也是只要修改php.ini文件即可。如session集中管理在192.168.1.220這個機器上,其他機器的php.ini文件修改如下:

session.save_handler?=?redis session.save_path?=?"tcp://192.168.1.220:6379?auth=password"

上面只是介紹了一些redis字符串類型了應用,開發者們可以結合實踐項目和自己的想象力,創造出更多的應用

? 版權聲明
THE END
喜歡就支持一下吧
點贊12 分享