Redis訂閱和發布模式和Redis事務


-------------------Redis訂閱和發布模式-------------------
1、概念
    Redis 發布訂閱(pub/sub)是一種消息通信模式:
    發送者(pub)發送消息,
    訂閱者(sub)接收消息。
    Redis 客戶端可以訂閱任意數量的頻道。
 
2、subscribe channel:訂閱個指定頻道的信息
 
3、publish channel message:將信息message 發送到指定的頻道channel
 
4、應用場景
    1、今日頭條訂閱號、微信訂閱公眾號、新浪微博關注、郵件訂閱系統
    2、即使通信系統
    3、群聊部落系統(微信群)
 
5、測試實踐:微信班級群 class:20170101
    1、學生C訂閱一個主題叫 :class:20170101
        >subscribe class:20170101
    2、學生A針對class:20170101主體發送消息,那么所有訂閱該主題的用戶都能夠接收到該數據。
        >publish class:20170101 "hello world! I am A"
    3、學生B針對class:20170101主體發送消息,那么所有訂閱該主題的用戶都能夠接收到該數據。
        >publish class:20170101 "hello world! I am B"
    展示學生C接受到的A\B同學發送過來的消息信息
        1) "subscribe"
        2) "class:20170101"
        3) (integer) 1
        1) "message"
        2) "class:20170101"
        3) "hello world! I am A"
        1) "message"
        2) "class:20170101"
        3) "hello word! I am B"
 
-------------------Redis事務-------------------
1、概念:
    redis中的事務是一組命令的集合。事務同命令一樣都是redis的最小執行單位,一個事務中的命令要么都執行,要么都不執行。
 
2、事務的兩種屬性
    1、事務是一個單獨的隔離操作:事務中的所有命令都會序列化、按順序的執行。事務在執行的過程中,不會被其他客戶端發送過來的命令請求所打斷。
    2、redis事務是原子。原子意味着要么所有的命令都執行,要么都不執行。
 
3、事務從開始到執行經歷的三個階段
    1、開始事務:multi
    >multi --- OK
 
    2、命令入隊
    >set "strOne" "hello"
    >set "strTwo" "world"
    >set "strThree" "!"
 
    3、執行事務:exec
    >exec
 
4、事務執行是常見錯誤:
    1、語法錯誤:語法錯誤指命令不存在或者命令參數的個數不對。
    2、運行錯誤:運行錯誤指在命令執行時出現的錯誤,比如使用散列類型的命令操作集合類型的鍵,這種錯誤在實際執行之前Redis是無法發現的,所以在事務里這樣的命令是會被Redis接受並執行的。如果事務里的一條命令出現了運行錯誤,事務里其他的命令依然會繼續執行。
        >multi
        >set key 1
        >sadd key 2
        >set key 3
        >exec
            1) OK
            2) (error) WRONGTYPE Operation against a key holding the wrong kind of value
            3) OK
        >get key --- "3"
 
5、watch命令:可以監控一個或多個鍵,一旦其中一個鍵被修改(或刪除),之后的事務就不會執行。監控一直持續到exec命令(事務中的命令是在exec之后才執行的,所以在multi命令后可以修改watch監控的鍵值)
    >set key 1 --- OK
    >watch key --- OK
    >set key 2 --- OK
    >multi --- OK
    >set key 3 --- QUEUED
    >exec --- (nil)
    >get key --- "2"
 
    def incr($key):
        watch $key
        $value =GET $key
        if not $value:
            $value = 0
        $value = $value + 1
    MULTI
    SET $key,$value
        resule = EXEC
    return resule[0]
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM