Redis的進階應用程式-交易處理、持久化、發布與訂閱訊息、虛擬記憶體使用,redis交易處理

來源:互聯網
上載者:User

Redis的進階應用程式-交易處理、持久化、發布與訂閱訊息、虛擬記憶體使用,redis交易處理

   三、交易處理

           Redis的交易處理比較簡單。只能保證client發起的事務中的命令可以連續的執行,而且不會插入其他的client命令,當一個client在串連中發出multi命令時,這個串連就進入一個事務的上下文,該串連後續的命令不會執行,而是存放到一個隊列中,當執行exec命令時,redis會順序的執行隊列中的所有命令。如果其中執行出現錯去,執行正確的不會復原,次不同於關係型資料庫的事務。

                  

             復原後age的值已經改變。

          取消一個事務用discard,取消事務隊列,資料全部復原。

          Redis樂觀鎖:使用watch監視指定的key,當exec時如果監視的key從調用watch後發生過變化,這整個事務會失敗。可調用watch多次監視多個key。watch和事務對整個串連有效,如果斷開了串連監視和事務都會清除(exec,discard,unwatch也不例外)。


     四、持久化機制

           Redis是一個支援持久化的記憶體資料庫,Redis需要經常將記憶體中的資料同步到磁碟來保證持久化。

           Redis支援兩種持久化方式:

                  1、snapshotting(快照),將資料存放到檔案裡,預設。

                             是將記憶體中的資料已快照的方式寫入到二進位檔案中,預設檔案dump.rdb,可以通過配置設定自動做快照持久化的方式。可配置Redis在n秒內如果超過m

                       個key被修改就自動儲存快照。


                            save 900 1       #900秒內如果超過1個key被修改,者發起快照儲存

                            save 300  10   #300秒內如果超過10個key被修改,這快照儲存

                            save  60    10000  #60秒內如果超過10000個資料被修改,發起快照儲存


                  2、 Append-only file(縮寫為aof),將讀寫操作存放到檔案中。

                            由於快照方式在一定間隔時間做一次,所以如果Redis意外down掉的話,就會丟失最後一次快照後的所有修改。

                            aof比快照方式有更好的持久化性,是由於使用aof時,redis會將每一個收到的寫命令都通過write函數住家到檔案中當redis啟東市會通過重新執行檔案中儲存    

                     的寫命令來在記憶體中重建立立整個資料庫的內容。

                             由於os會在核心中緩衝write做的修改,所以可能不是立即寫到磁碟上,這樣aof方式的持久化也還是有可能會丟失一部分資料。

                             可以通過設定檔告訴redis我們想要通過fsync函數強制os寫入到磁碟的時機。

                             

                             appendonly   yes  #啟用aof持久化方式

                             #appendfsync    always //收到寫命令就立即寫入磁碟,最慢,但是保證了資料的完整持久化

                             appendfsync       everysec  //每秒中寫入磁碟一次,在效能和持久化方面做了很好的折中

                             #appendfsync      no     //完全依賴os,效能最好,持久化沒有保證


                  開啟以後,在bin檔案夾中會多兩個隱藏檔,如下:

                       

       

         五、發布與訂閱資訊

               發布訂閱(pub/sub)是一種訊息通訊模式,主要的目的是解除訊息發行者和訂閱者之間的耦合,Redis作為一個pub/sub的server,在訂閱者和發行者之間起到訊息路由的功能。訂閱者通過subscribe和psubscribe命令向redis訂閱自己感興趣的訊息類型,redis將資訊類型成為通道(channel)。當發行者通過關publish命令向redis server發送特定類型的資訊時,訂閱該訊息類型的全部client都會接收到此訊息。

            例如開啟三個用戶端,一個發布訊息,另外兩個訂閱訊息,如下

                       

 

           六、虛擬記憶體的使用

                    Redis的虛擬記憶體是暫時吧不經常訪問的資料從記憶體交換到磁碟中,從而騰出記憶體空間用於其他的訪問資料,尤其對於redis這樣的記憶體資料庫,記憶體總是不夠用的。除了分隔到多個redis server外,提高資料庫的容量的方法就是使用虛擬記憶體,把那些不常訪問的資料交換到磁碟上。

          通過配置vm相關的redis.config配置:

               vm-enable  yes                                      #開啟vm功能

               vm-swap-file    /tmp/redis.swap          #交換出來的value儲存的檔案路徑

               vm-max-memory    10000000              #redis使用的最大記憶體上線

               vm-page-size           32                           #每個頁面的大小32位元組

               vm-pages                  123217729          #最多使用多小個頁面

               vm-max-threads        4                            #用於執行value對象換入的背景工作執行緒數量

        虛擬記憶體管理在2.6及之上版本取消了


         

                

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.