經常會被人問在什么場景下使用到了redis ? 這個問題和業務是很相關的 , 脫離業務需求的回答都不能說服別人.
在我的業務里有一個提交試用的表單申請 , 這個申請之前是默認直接存入資料庫的訂單表和企業表 .
后來不知道被那個閑人發現了,就一直往里提交垃圾資料 , 增加了驗證碼和手機短信驗證碼 , 仍然不能阻擋住他提交的熱情 .
pm一生氣 , 說把它改成后臺審核通過后再入庫 , 并且審核按鈕要有時效性 , 超時的也不能提交 , 讓我一天內就解決掉 .
因為公司的資料庫需要單獨申請建表 , 還有設計表結構 , 還得等審核 , 時間來不及 .仔細一想 , redis不就是個nosql型別的資料庫嗎 , 并且這條資料并不需要一直留著 , 說干就干 ,直接往redis里存 , 后臺增加個審核頁面 , 再去插入資料庫.
redis的五種基本資料型別中 , 有一種非常合適 , 那就是hash , 存盤一條類似資料庫的記錄 .
設計下k-v , key就是order:{唯一編號} , value是 每個鍵值對 field value , field1 value1 ...
結構設計完成后 , 業務代碼類似這樣:
$order=array(); $order['name']="shihan"; $order['admin']="shihan"; $id=sha1(time().$_SERVER['SERVER_ADDR'].getmypid().mt_rand()); $key="order:".$id; $redis->expire($key,86400); $redis->hMset($key,$order);這里面id是唯一的 , 拿時間-行程id-ip-亂數 , sha1生成 .過期時間需要單獨用expire來設定 取出資料是下面這樣 :
$key="order:".$id; $orderField=array("name","admin"); $order=$redis->hMget($key,$orderField);
取出來后再入庫就可以了 , 然后刪掉這個key.
這個實作就是利用了nosql資料庫的靈活性 , redis豐富的資料型別 , 解決了業務問題.
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/77616.html
標籤:PHP
上一篇:PHP7-2: 面向物件開發
下一篇:使用PHP語言判斷閏年與平年
