溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Redis發(fā)布訂閱演示、事務(wù)演示、持久化的方法

發(fā)布時間:2021-02-23 11:59:34 來源:億速云 閱讀:217 作者:小新 欄目:關(guān)系型數(shù)據(jù)庫

小編給大家分享一下Redis發(fā)布訂閱演示、事務(wù)演示、持久化的方法,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

文章目錄

  • 一、Redis發(fā)布訂閱介紹

  • 二、Redis發(fā)布訂閱演示

  • 三、Redis中的事務(wù)

  • 四、轉(zhuǎn)賬功能-Redis事務(wù)演示

  • 五、轉(zhuǎn)賬功能升級版-watch

  • 六、事務(wù)的錯誤處理


    • 業(yè)務(wù)邏輯錯誤

    • 語法錯誤

  • 七、Redis持久化


    • RDB持久化

    • AOF持久化


一、Redis發(fā)布訂閱介紹

Redis 發(fā)布訂閱(pub/sub)是一種消息通信模式:發(fā)送者(pub)發(fā)送消息,訂閱者(sub)接收消息。Redis 客戶端可以訂閱任意數(shù)量的頻道。

Redis發(fā)布訂閱演示、事務(wù)演示、持久化的方法

應(yīng)用場景:

  • 構(gòu)建實時消息系統(tǒng),比如普通的即時聊天,群聊等功能。

  • ②在一個博客網(wǎng)站中,有n多個粉絲訂閱了你,當(dāng)你發(fā)布新文章,就可以推送消息給粉絲們。

  • 微信公眾號模式。

二、Redis發(fā)布訂閱演示

發(fā)布訂閱語法
訂閱頻道:

  • subscribe channel1 [channel2 ...]     訂閱給定的一個或多個頻道的信息

  • psubscribe pattern1 [pattern2 ...]    訂閱一個或多個符合給定模式的頻道。
    Redis發(fā)布訂閱演示、事務(wù)演示、持久化的方法
    發(fā)布頻道:

  • publish channel message           將信息發(fā)送到指定的頻道。
    Redis發(fā)布訂閱演示、事務(wù)演示、持久化的方法
    Redis發(fā)布訂閱演示、事務(wù)演示、持久化的方法
    退訂頻道:

  • unsubscribe channel1 [ channel2 ...]    指退訂給定的頻道。

  • punsubscribe pattern1 [pattern2 ...]   退訂所有給定模式的頻道。
    Redis發(fā)布訂閱演示、事務(wù)演示、持久化的方法

三、Redis中的事務(wù)

Redis 事務(wù)可以一次執(zhí)行多個命令,(按順序地串行化執(zhí)行,執(zhí)行中不會被其它命令插入,不許加塞)

事務(wù)應(yīng)用場景:

  • 商品秒殺

  • 轉(zhuǎn)賬

兩個特點:

  • Redis會將一個事務(wù)中的所有命令序列化,然后按順序執(zhí)行(任意命令執(zhí)行失敗,其余的命令依然被執(zhí)行)

  • 執(zhí)行中不會被其它命令插入,不許出現(xiàn)加賽行為。

一個事務(wù)從開始到執(zhí)行會經(jīng)歷以下三個階段:開始事務(wù)、命令入隊、執(zhí)行事務(wù)。

事務(wù)相關(guān)命令:
multi      標(biāo)記一個事務(wù)塊的開始。
exec      執(zhí)行所有事務(wù)塊內(nèi)的命令。
discard     取消事務(wù),放棄執(zhí)行事務(wù)塊內(nèi)的所有命令。
watch key    監(jiān)視一個(或多個)key,如果在事務(wù)執(zhí)行之前這個(或這些)key被其他命令所改動,那么事務(wù)將被打斷。
unwatch     取消watch命令對所有key的監(jiān)視。

四、轉(zhuǎn)賬功能-Redis事務(wù)演示

需求:轉(zhuǎn)帳功能,A向B帳號轉(zhuǎn)帳50元。

  • 轉(zhuǎn)賬前A有80元,B有10元。

  • 轉(zhuǎn)賬后A有30元,B有60元。

本例先以multi開始一個事務(wù),然后將多個命令入隊到事務(wù)中,最后由 exec命令觸發(fā)事務(wù)。

  • 輸入Multi命令開始,輸入的命令都會依次進入命令隊列中,但不會執(zhí)行。

  • 直到輸入Exec后,Redis會將之前的命令隊列中的命令依次執(zhí)行。
    Redis發(fā)布訂閱演示、事務(wù)演示、持久化的方法
    執(zhí)行exec前,如果發(fā)現(xiàn)添加的命令有問題,可以使用discard命令放棄隊列運行,類似于MySQL中的回滾操作。

五、轉(zhuǎn)賬功能升級版-watch

需求:某一賬戶在一事務(wù)內(nèi)進行操作,在提交事務(wù)前,另一個進程對該賬戶進行操作。

上文中的轉(zhuǎn)賬是不安全的,在執(zhí)行中如果有其他命令對賬戶a或者b的操作,可能會出現(xiàn)幻讀;解決辦法是添加watch命令,可以對賬戶進行watch監(jiān)視,一旦在事務(wù)執(zhí)行中,出現(xiàn)了其他命令對賬戶a或b操作,程序直接報錯回滾。

Redis發(fā)布訂閱演示、事務(wù)演示、持久化的方法

執(zhí)行了watch命令后,如果execdiscard命令先被執(zhí)行,就不需要再執(zhí)行unwatch來取消對key的監(jiān)視了,因為exec或discard命令會自動取消監(jiān)視。

六、事務(wù)的錯誤處理

業(yè)務(wù)邏輯錯誤

發(fā)生業(yè)務(wù)邏輯錯誤:只有報錯的命令不會被執(zhí)行,而其它的命令都會執(zhí)行,不會回滾。
Redis發(fā)布訂閱演示、事務(wù)演示、持久化的方法

語法錯誤

發(fā)生語法錯誤:執(zhí)行時整個的所有隊列都會被取消。
Redis發(fā)布訂閱演示、事務(wù)演示、持久化的方法

七、Redis持久化

數(shù)據(jù)存放在內(nèi)存:高效、但斷電內(nèi)存數(shù)據(jù)會丟失。
數(shù)據(jù)存放在硬盤:讀寫速度慢于內(nèi)存、但斷電數(shù)據(jù)不會丟失。

RDB持久化

RDB是redis的默認持久化機制。RDB相當(dāng)于照快照,保存的是數(shù)據(jù)的一種狀態(tài)。(幾十G的數(shù)據(jù)可以保存為幾KB的快照)

快照是默認的持久化方式。這種方式是就是將內(nèi)存中數(shù)據(jù)以快照的方式寫入到二進制文件中,默認的文件名為dump.rdb(存在redis.conf文件中)。

優(yōu)點:

  • 快照保存數(shù)據(jù)極快、還原數(shù)據(jù)極快

  • 適用于災(zāi)難備份

缺點:

  • 小內(nèi)存機器不適合使用,RDB機制符合要求就會照快照,占內(nèi)存。

AOF持久化

由于快照方式是在一定間隔時間做一次的,所以如果redis 意外宕機,就會丟失最后一次快照后的所有修改。如果應(yīng)用要求不能丟失任何修改的話,可以采用AOF(Append-Only File)持久化方式。

appendonly yes 命令可以啟用 AOF 持久化方式。

有三種方式如下(默認是:每秒 fsync 一次)

  • appendfsync always     收到寫命令就立即寫入磁盤,最慢,但是保證完全的持久化

  • appendfsync everysec    每秒鐘寫入磁盤一次,在性能和持久化方面做了很好的折中

  • appendfsync no       完全依賴OS,性能最好,但持久化沒保證

優(yōu)點:
AOF比快照方式有更好的持久化性,是由于在使用AOF持久化方式時:redis 會將每一個收到的寫命令都通過write 函數(shù)追加到文件中(默認是appendonly.aof)。當(dāng)redis 重啟時會通過重新執(zhí)行文件中保存的寫命令來在內(nèi)存中重建整個數(shù)據(jù)庫的內(nèi)容。

缺點:

AOF的方式也同時帶來了另一個問題。持久化文件會變的越來越大,占硬盤 。例如我們調(diào)用 incr test命令 100 次,文件中必須保存全部的 100 條命令,其實有 99 條都是多余的。

以上是“Redis發(fā)布訂閱演示、事務(wù)演示、持久化的方法”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識,歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI