1、問:什么是消息隊列?
答:是一個消息的鏈表,是一個異步處理的數據處理引擎。
2、問:有什么好處?
答:不僅能夠提高系統的負荷,還能夠改善因網絡阻塞導致的數據缺失。
3、問:用途有哪些?
答:郵件發送、手機短信發送,數據表單提交、圖片生成、視頻轉換、日志儲存等。
4、問:有哪些軟件?
答:ZeroMQ、Posix、SquirrelMQ、Redis、QDBM、Tokyo Tyrant、HTTPSQS等(linux平台下)。
5、問:怎么實現?
答:顧名思義,先入隊,后出隊;先把數據丟到消息隊列(入隊),后根據相應的key來獲取數據(出隊)。
6、問:Redis可以做消息隊列?
答:首先,redis設計用來做緩存的,但是由於它自身的某種特性使得它可以用來做消息隊列,它有幾個阻塞式的API可以使用,正是這些阻塞式的API讓其有能力做消息隊列;另外,做消息隊列的其他特性例如FIFO(先入先出)也很容易實現,只需要一個list對象從頭取數據,從尾部塞數據即可;redis能做消息隊列還得益於其list對象blpop brpop接口以及Pub/Sub(發布/訂閱)的某些接口,它們都是阻塞版的,所以可以用來做消息隊列。
7、問:怎么做(基於ThinkPHP)?
答:7.1 安裝redis,過程(略);
7.2 安裝php-redis擴展,過程(略);
7.3 貼代碼
圖1 入隊
圖2 入隊結果
圖3 出隊
圖4 出隊結果
圖5 完整代碼
8、小結:redis的lPush命令將一個或多個值插入到列表頭部與rPush與rPush相反;rPop命令用於溢出並返回列表的最后一個元素與lPop相反。