記錄Redis學習

1.Redis的數(shù)據(jù)類型

  a.String
     string類型是Redis最基本的數(shù)據(jù)類型,一個redis中字符串value最多可以是512M
  b.Hash
     Redis hash是一個string類型的field和value的映射表,hash特別適合用于存儲對象。
  c.List
      Redis 列表是簡單的字符串列表,按照插入順序排序,它的底層實際是個鏈表
  d.Set
      Redis的Set是string類型的無序集合。它是通過HashTable實現(xiàn)實現(xiàn)的
  e.ZSet
      Redis zset 和 set 一樣也是string類型元素的集合,且不允許重復的成員。不同的是每個元素都會關聯(lián)一個double類型的分數(shù)。    
      redis正是通過分數(shù)來為集合中的成員進行從小到大的排序。zset的成員是唯一的,但分數(shù)(score)卻可以重復。

各類型常用操作:Http://redisdoc.com/

2.Redis的持久化

   a.RDB(Redis DateBase)
       Redis會單獨創(chuàng)建(fork)一個子進程來進行持久化,會先將數(shù)據(jù)寫入到一個臨時文件中,待持久化過程都結束了,再用個    
       臨時文件替換上次持久化好的文件。整個過程中,主進程是不進行任何IO操作的,這就確保了極高的性能如果需要進行規(guī) 
       模數(shù)據(jù)的恢復,且對于數(shù)據(jù)恢復的完整性不是非常敏感,那RDB方式要比AOF方式更加的高效。RDB的缺點是最后一次久 
       化后的數(shù)據(jù)可能丟失。Rdb 保存的是dump.rdb文件
       
       觸發(fā)RDB快照:
              Save:save時只管保存,其它不管,全部阻塞
              BGSAVE:Redis會在后臺異步進行快照操作,快照同時還可以響應客戶端請求??梢酝ㄟ^lastsave命令獲取最后一次    
                                成功執(zhí)行快照的時間

      恢復RDB快照:
              將備份文件 (dump.rdb) 移動到 redis 安裝目錄并啟動服務即可

      優(yōu)勢:
              1.適合大規(guī)模的數(shù)據(jù)恢復
              2.對數(shù)據(jù)完整性和一致性要求不高
      劣勢:
              1.在一定間隔時間做一次備份,所以如果redis意外down掉的話,就會丟失最后一次快照后的所有修改
              2.Fork的時候,內(nèi)存中的數(shù)據(jù)被克隆了一份,大致2倍的膨脹性需要考慮
image.png
    b.AOF(Append Only File)
        以日志的形式來記錄每個寫操作,將Redis執(zhí)行過的所有寫指令記錄下來(讀操作不記錄),只許追加文件但不可以改寫文 
        件,redis啟動之初會讀取該文件重新構建數(shù)據(jù),換言之,redis重啟的話就根據(jù)日志文件的內(nèi)容將寫指令從前到后執(zhí)行一次 
        以完成數(shù)據(jù)的恢復工作。Aof保存的是appendonly.aof文件。
        
        啟動恢復:
        ![image.png](https://upload-images.jianshu.io/upload_images/10745737-a13be2acdd4fd166.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

        Rewirte:
              AOF采用文件追加方式,文件會越來越大為避免出現(xiàn)此種情況,新增了重寫機制,當AOF文件的大小超過所設定的閾值        
              時,Redis就會啟動AOF文件的內(nèi)容壓縮,只保留可以恢復數(shù)據(jù)的最小指令集.可以使用命令bgrewriteaof

              重寫原理:AOF文件持續(xù)增長而過大時,會fork出一條新進程來將文件重寫(也是先寫臨時文件最后再rename),遍歷新 
                                進程的內(nèi)存中數(shù)據(jù),每條記錄有一條的Set語句。重寫aof文件的操作,并沒有讀取舊的aof文件,而是將整 
                                個內(nèi)存中的數(shù)據(jù)庫內(nèi)容用命令的方式重寫了一個新的aof文件,這點和快照有點類似。

              優(yōu)勢/劣勢:
                        ![image.png](https://upload-images.jianshu.io/upload_images/10745737-5788a2bdaeff3b22.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
image.png

3.Redis事務

  可以一次執(zhí)行多個命令,本質(zhì)是一組命令的集合。一個事務中的所有命令都會序列化,按順序地串行化執(zhí)行而不會被其它命令 
  插入,不許加塞      

  常用操作:
        ![image.png](https://upload-images.jianshu.io/upload_images/10745737-852c00e95fa7e50c.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

  步驟:
        ![image.png](https://upload-images.jianshu.io/upload_images/10745737-36e6a8d1c772ac95.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

  特性:
        1.單獨的隔離操作:事務中的所有命令都會序列化、按順序地執(zhí)行。事務在執(zhí)行的過程中,不會被其他客戶端發(fā)送來的命    
           令請求所打斷。
        2.沒有隔離級別的概念:隊列中的命令沒有提交之前都不會實際的被執(zhí)行,因為事務提交前任何指令都不會被實際執(zhí)行,
           也就不存在”事務內(nèi)的查詢要看到事務里的更新,在事務外查詢不能看到”這個讓人萬分頭痛的問題
        3.不保證原子性:redis同一個事務中如果有一條命令執(zhí)行失敗,其后的命令仍然會被執(zhí)行,沒有回滾

4.Redis發(fā)布訂閱

   進程間的一種消息通信模式:發(fā)送者(pub)發(fā)送消息,訂閱者(sub)接收消息。

  常見命令:
image.png
 操作:
    先訂閱后發(fā)布后才能收到消息,
       1 可以一次性訂閱多個,SUBSCRIBE c1 c2 c3
       2 消息發(fā)布,PUBLISH c2 hello-redis
       3 訂閱多個,通配符*, PSUBSCRIBE new*
       4 收取消息, PUBLISH new1 redis2015

5.Redis主從復制

   主機數(shù)據(jù)更新后根據(jù)配置和策略,自動同步到備機的master/slaver機制,Master以寫為主,Slave以讀為主
  
    復制原理:
            ![image.png](https://upload-images.jianshu.io/upload_images/10745737-339f59c13c34dbb8.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

    哨兵模式:
            反客為主的自動版,能夠后臺監(jiān)控主機是否故障,如果故障了根據(jù)投票數(shù)自動將從庫轉(zhuǎn)換為主庫

  缺陷:
     由于所有的寫操作都是先在Master上操作,然后同步更新到Slave上,所以從Master同步到Slave機器有一定的延遲,當系統(tǒng)      
     很繁忙的時候,延遲問題會更加嚴重,Slave機器數(shù)量的增加也會使這個問題更加嚴重。
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • 基于內(nèi)存的NoSQL數(shù)據(jù)庫。提供五種數(shù)據(jù)結構的存儲。字符串、列表、集合、有序集合、散列表。Redis 支持很多特性...
    韓絕交閱讀 813評論 0 1
  • NOSQL類型簡介鍵值對:會使用到一個哈希表,表中有一個特定的鍵和一個指針指向特定的數(shù)據(jù),如redis,volde...
    MicoCube閱讀 4,160評論 2 27
  • Nosql概述 在介紹Redis之前,首先先要介紹Nosql的概念。 互聯(lián)網(wǎng)架構發(fā)展 在90年代的時候,計算機訪問...
    COKIDCC閱讀 755評論 0 1
  • 摘自http://xiaoh.me/2016/06/30/redis-advanced/ 排序 redis支持對l...
    鴕鳥要抬頭閱讀 66,823評論 1 3
  • Zookeeper用于集群主備切換。 YARN讓集群具備更好的擴展性。 Spark沒有存儲能力。 Spark的Ma...
    Yobhel閱讀 7,604評論 0 34

友情鏈接更多精彩內(nèi)容